我有一个从.NET WebService返回的自定义对象列表,并使用来自父级enitity与Core Data的To-Many关系存储它们。
我想使用NSSet作为UITableView的数据源,并在选择行时将新控制器推送到堆栈。
使用[NSSet allObjects]
时,返回的数组总是具有相同的顺序吗? (我猜不是因为集合是无序的)
如果没有,我如何使用NSArray *myArray = [mySet allObjects];
中的cellForRowAtIndexPath
来获取单元格的textLabel
的名称,然后再次didSelectRowAtIndexPath
中的UITableViewDelegate
来指定对象ViewController即将被推送?
我已经在我的NSArray
中合成了父对象。我考虑过合成allObjects
并在viewDidLoad
中仅使用{{1}}创建一次,但这会复制内存中的数据
答案 0 :(得分:33)
由于NSSet
没有(技术上)维持秩序,因此无法保证它们的顺序相同。如果碰巧对象做每次都以相同的顺序返回,那么请注意这是一个实现细节,没有记录,并且可能在将来的框架版本中进行更改。
(
-[NSSet allObjects]
返回)[a]包含集合成员的数组,如果集合没有成员则返回一个空数组。 未定义数组中对象的顺序。
(强调补充)
答案 1 :(得分:8)
在NSArray
期间提取viewDidLoad
一次的解决方案是正确的。你实际上不会复制太多内存。你的对象仍然只会在内存中一次;只是你的NSSet
和NSArray
都包含指向这些对象的指针。
答案 2 :(得分:3)
使用NSOrderedSet代替NSSet。