【问题标题】:iOS >> CoreData >> Should I Create an ID Attribute or Can I Use the SQLite Object ID?iOS >> CoreData >> 我应该创建一个 ID 属性还是可以使用 SQLite 对象 ID?
【发布时间】:2013-10-08 10:21:20
【问题描述】:

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

如果有使用 DB ID 字段的方法,我将不胜感激在通过 managedObject 实例保存记录时如何获取它的一些指导...

【问题讨论】:

    标签: ios sqlite core-data


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-25
          • 2019-05-05
          • 2018-04-07
          相关资源
          最近更新 更多