核心数据按自动增量指数排序?

时间:2012-05-08 16:54:43

标签: ios core-data

核心数据按自动增量索引排序?

我用Google搜索的Core Data没有明确的自动增量ID。 因此,如果没有自行实现编码,就无法按自动增量ID进行排序 (这很容易在sqlite3中直接完成)。

我发现了什么

ObjectID:但没有自动增加ID。 ** NSSortedSet:iOS 5.0 / OS X 10.7+,不是一个好主意

或者我必须这样做

**添加像entityID这样的属性,并在代码中设置然后安全

我在App中的麻烦

一个问题的四个答案A,B,C,D,答案是顺序的。我在想添加entityID并为它设置一个增量值。然后我将它用于SORT

@interface NSQuestion : NSManagedObject

@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSNumber * questionID;
@property (nonatomic, retain) NSSet *answers; 
@property (nonatomic, retain) NSAnswer *selectedAnswer;
@end

加成

我从xcdatamodeld导出模型NSQuestion,*我在徘徊为什么它是NSSet 答案而不是NSArray答案

好的方式?

如果其他任何人有类似这样的问题,你的真正解决方案是什么?

2 个答案:

答案 0 :(得分:3)

您可以根据内部对象ID进行排序,但排序将是任意的,因为没有固有的排序(如输入时间)。

如果您希望根据订单的顺序进行排序,可以选择几种方式。

不幸的是,你真的没有指明你的真正目标,因此很难指出你的最佳方向。

如果您只想根据插入顺序访问对象,则可以使用有序集。只需要一个与所有对象具有1对多关系的“根”对象。检查模型的“有序”框。

现在,您可以简单地将对象添加到该关系中。它会保持秩序,你不会付出太多的表现,因为你不会经常重新订购它们。

或者,您可以使用细粒度的时间戳,并在插入时将其添加到每个对象。然后,根据它进行排序......它将按照插入顺序为您提供对象。

或者,你可以使用一个简单的计数器。从数据库加载计数器对象。为新对象提供计数器的当前值,并为每个新对象递增计数器。您可以在托管对象类上放置一个类别来创建对象,它可以自动创建ID。

解决问题的大量解决方案......取决于您想要实现的目标。

哦,是的...目前,iCloud不支持有序关系......

答案 1 :(得分:0)

使用带有self作为排序键的排序描述符。基础SQL将具有ORDER BY t0.Z_PKZ_PK是记录的内部ID(作为对象的NSManagedObjectID的最后一个组成部分)。