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