[NSSet allObjects]每次都会以相同的顺序返回一个数组吗?

问题描述:

我有一个从.NET WebService返回的自定义对象的列表,并使用来自父实体与Core Data的To-Many关系存储它们。[NSSet allObjects]每次都会以相同的顺序返回一个数组吗?

我想使用NSSet作为UITableView的数据源,并在选择一行时将新控制器压入堆栈。

使用[NSSet allObjects]时,返回的数组总是具有相同的顺序吗? (我想不会因为集合是无序的)

如果没有,怎么那么我可以用在cellForRowAtIndexPathNSArray *myArray = [mySet allObjects];以获取细胞的textLabel,然后在didSelectRowAtIndexPath再次名称,分配对象到ViewController即将推?

我已经在我的UITableViewDelegate中合成了父对象。我曾经想过,也有一个NSArray合成,并使用allObjects只有在viewDidLoad一次创建,但这是在内存中复制数据

您的解决方案,提取NSArray一次在viewDidLoad,是正确的。你实际上不会复制太多内存。你的对象仍然只在内存中一次;只是你的NSSetNSArray都会包含指向这些对象的指针。

有没有保证,他们会以相同的顺序,因为一个NSSet不(技术上) 维护秩序。如果碰巧对象确实每次都以相同的顺序返回,那么请注意这是一个实现细节,没有记录,并且可能会在将来的框架版本中进行更改。

引述the documentation

-[NSSet allObjects]返回)并[a]含N集合的成员,或一个空数组,如果该组中没有成员阵列。 未定义数组中对象的顺序。

(强调)

+0

此答案实际上有原始问题的答案。 – Gomfucius 2016-06-01 19:52:35

使用NSOrderedSet而不是NSSet。