iOS >> CoreData >> 我应该创建 ID 属性还是可以使用 SQLite 对象 ID?

Oha*_*gev 5 sqlite core-data ios

使用 CoreData 时,我是否需要创建一个 ID 属性来为每条记录提供某种唯一键,还是可以访问表中每一行的数据库 ID 字段?

如果有一种方法可以使用 DB ID 字段,我会很感激有关如何在通过 managedObject 实例保存记录时获得它的一些指导...

Chr*_*nle 6

通常不需要创建 id 属性,因为每个对象都有一个对象 ID(NSManagedObjectID)。如果你有一个托管对象,你可以通过向它发送 -objectID 来获取它的 id。不过有一个问题:

有一个问题:NSManagedObjectID 可以是临时的,也可以是永久的。创建对象时,它具有一个临时 ID,直到您获得该对象的永久 ID。当你持久化一个对象时,Core Data 会自动为每个仍然有临时 ID 的对象获取一个永久 ID。

如果您需要自定义 ID 属性,您应该为每个实体单独创建它。不要创建具有 ID 属性的抽象实体。如果你这样做,Core Data 将为从抽象实体继承的所有实体创建一个巨大的(怪物)表。这不好。


Cle*_*rem 3

NSManagedObjects 有一个对象 id 属性。但是,当您创建 ManagedObject 时,会有一个临时 id,将对象存储到数据库后,它将获得永久 id。根据我的经验,最好为每个数据创建自己的 id。例如,如果它是一个简单的表,您可以简单地使用时间戳作为唯一 ID,或者如果它是一个实时且频繁更新的复杂表,您应该使用表中带有时间戳的字段的某种组合(您可以将值转换为base64 使其成为真实的 id ;))。