iPhone:NSSet保持排序顺序

时间:2010-09-06 21:04:48

标签: iphone core-data

我有一个NSMutableArray,它有大约18个对象。它们按我想要的特定顺序排列。我必须将这些对象添加到NSSet中以保存在Core Data中。

但是,一旦我使用[myObject.items allObjects]将它们从NSSet中拉出来,它就不会保留我添加对象的原始顺序。我怎样才能保留我想要的订单,我不想诉诸它们。

2 个答案:

答案 0 :(得分:4)

集合没有排序顺序,因为集合没有顺序概念。数组具有固定的顺序,因为数组中元素的顺序是定义数组的顺序。对比度的集合由集合中每个单独对象的唯一性定义。数组可以在不同的索引处具有相同元素的许多副本,但是一个集合永远不能存储两次相同的对象。

核心数据使用集合,因为它需要确切地知道哪些对象彼此相关。在大多数情况下,任何订购例如字母,数字等仅由UI需要,并且不参与数据模型模拟的现实世界对象,事件或条件的实际建模。例如,如果您的模型为Department<-->>Employee,则属于特定部门的所有员工都将构成一个集合。您可能需要按名称,出生日期,雇用日期等对员工进行排序,但这只是为了展示而与这种关系无关。

如果您需要建模任意类型的任意顺序,则需要添加一个属性,该属性包含您可以根据需要排序的属性。这不是开销,因为订单成为模型模拟的现实世界对象,事件或条件的一部分。

答案 1 :(得分:1)

如果您不想对它们进行排序,可以将属性(例如int indexInList)添加到代表列表中位置的对象。

但是使用

对列表中的对象属性进行排序也很容易
- (void)sortUsingSelector:(SEL)comparator
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 
...