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

时间:2013-10-08 10:21:20

标签: ios sqlite core-data

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

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

3 个答案:

答案 0 :(得分:4)

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

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

如果您需要自定义ID属性,则应分别为每个实体创建它。不要使用ID属性创建抽象实体。如果你这样做,Core Data将为从抽象实体继承的所有实体创建一个巨大的(怪物)表。这很糟糕。

答案 1 :(得分:2)

Apple建议不要访问Core Data创建的SQLite文件,因为它的格式可能会在未来发生变化。遵循此规则,您应该创建自己的ID。

还有一个NSManagedObject - objectID,但我不确定你的用例是什么以及是否应该使用它。

答案 2 :(得分:1)

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