18

我有一个从 .NET WebService 返回的自定义对象列表,并使用父实体与 Core Data 的多对多关系存储它们。

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

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

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

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

4

3 回答 3

33

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

引用文档

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

(重点补充)

于 2010-10-04T15:48:06.617 回答
8

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

于 2010-10-04T18:38:45.467 回答
3

使用 NSOrderedSet 而不是 NSSet。

于 2015-06-08T01:20:22.053 回答