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

时间:2010-10-04 15:32:31

标签: iphone core-data uitableview nsset

我有一个从.NET WebService返回的自定义对象列表,并使用来自父级enitity与Core Data的To-Many关系存储它们。

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

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

如果没有,我如何使用NSArray *myArray = [mySet allObjects];中的cellForRowAtIndexPath来获取单元格的textLabel的名称,然后再次didSelectRowAtIndexPath中的UITableViewDelegate来指定对象ViewController即将被推送?

我已经在我的NSArray中合成了父对象。我考虑过合成allObjects并在viewDidLoad中仅使用{{1}}创建一次,但这会复制内存中的数据

3 个答案:

答案 0 :(得分:33)

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

引用the documentation

  

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

(强调补充)

答案 1 :(得分:8)

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

答案 2 :(得分:3)

使用NSOrderedSet代替NSSet。