2

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

我已经用谷歌搜索过核心数据没有明确的自动增量 ID。因此,如果没有自我实现编码(这很容易在 sqlite3 中直接完成),就无法按自动增量 ID 排序。

我发现了什么

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

或者我必须这样做

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

我在应用程序中的麻烦

一个问题的四个答案 A、B、C、D,答案是顺序的。我正在考虑添加 entityID 并为其设置增量值。然后我用它来排序

@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 答案

好办法?

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

4

2 回答 2

3

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

如果您希望根据插入的顺序进行排序,有几个选项。

不幸的是,你真的没有明确你的真正目标,所以很难为你指明最佳方向。

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

现在,您可以简单地将对象添加到该关系中。它将维持它们的顺序,并且您不会付出太多的性能,因为您不会不断地重新订购它们。

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

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

您的问题的大量解决方案...取决于您想要实际完成的任务。

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

于 2012-05-08T19:07:24.703 回答
-1

使用排序描述符 withself作为排序键。底层 SQL 将具有ORDER BY t0.Z_PK,Z_PK作为记录的内部 ID(作为对象的最后一个组件找到NSManagedObjectID)。

于 2018-10-18T19:56:25.127 回答