2010-09-06 100 views
1

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

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

回答

1

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

但关于列表排序的对象的属性将是非常有

- (void)sortUsingSelector:(SEL)comparator 
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 
... 
+0

好的,但我的困惑来自于为什么当我添加一个对象到NSSet时它自动不会保持我的排序顺序。 – 2010-09-06 21:38:27

+1

集合没有订单。这是一套基本属性。 – 2010-09-07 03:05:44

+0

正因为如此,你不能在一个集合中有两个对象 - 在一个数组中它是可能的! – brutella 2010-09-08 18:07:40

4

集太容易没有排序顺序,因为集没有次序的概念。数组具有固定顺序,因为数组中元素的顺序是定义数组的顺序。相反,集合是由集合中每个单独对象的唯一性定义的。一个数组可以在不同索引处具有相同元素的许多重复项,但一组数据不能两次存储同一个对象。

核心数据使用集合,因为它需要准确知道哪些对象相互关联。在大多数情况下,任何订购例如字母,数字等仅由用户界面需要,并不参与数据模型模拟的真实世界对象,事件或条件的实际建模。例如,如果您的模型为Department<-->>Employee,则属于特定部门的所有员工都将包含一个集合。您可能需要根据姓名,出生日期,雇用日期等对员工进行分类,但这只是为了展示,并且与关系无关。

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