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

miz*_*zle 18 iphone core-data uitableview nsset

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

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

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

如果没有,那么我如何使用NSArray *myArray = [mySet allObjects];in cellForRowAtIndexPath来获取textLabel单元格的名称,然后再将in didSelectRowAtIndexPath对象分配给即将推送的ViewController?

我已经在我的家伙中合成了父对象UITableViewDelegate.我已经考虑过也有一个NSArray合成并且allObjects只使用一次viewDidLoad创建,但这会复制内存中的数据

Dav*_*ong 33

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

引用文档:

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

(重点补充)


Jos*_*man 8

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