使用 CoreData 时,我是否需要创建一个 ID 属性来为每条记录设置某种唯一键,或者我可以访问表中每一行的数据库 ID 字段吗?
如果有一种使用 DB ID 字段的方法,我将不胜感激在通过 managedObject 实例保存记录时如何获取它的一些指导......
通常不需要创建 id 属性,因为每个对象都有一个对象 ID (NSManagedObjectID)。如果您有一个托管对象,您可以通过向它发送 -objectID 来获取它的 ID。不过有一个问题:
有一个问题:一个 NSManagedObjectID 可以是临时的也可以是永久的。创建对象时,它具有一个临时 ID,直到您获得该对象的永久 ID。当你持久化一个对象时,Core Data 会自动为每个仍然有临时 ID 的对象获取一个永久 ID。
如果您需要自定义 ID 属性,您应该为每个实体单独创建它。不要创建具有 ID 属性的抽象实体。如果你这样做,Core Data 将为从抽象实体继承的所有实体创建一个巨大的(怪物)表。这是不好的。
NSManagedObjects 有一个对象 id 属性。但是当你创建一个 ManagedObject 会有一个临时 id,在将对象存储到 DB 之后它将获得永久 id。根据我的经验,最好为每个数据创建自己的 id。例如,如果它是一个简单的表,您可以简单地使用时间戳作为唯一 ID,或者如果它是一个具有实时和频繁更新的复杂表,您应该使用表中的字段与时间戳的某种组合(您可以将值转换为base64 使其成为真实的 id ;) )。
Apple 建议不要访问 Core Data 创建的 SQLite 文件,因为它的格式将来可能会改变。遵循此规则,您应该创建自己的 ID。
还有一个NSManagedObject - objectID,但我不确定你的用例是什么以及你是否应该使用它。