【问题标题】:NSManagedObject identification numberNSManagedObject 标识号
【发布时间】:2011-11-30 05:53:18
【问题描述】:

好吧,我好像在问一个菜鸟问题(也许我是,而且我只是忽略了重要的细节),但我正在寻找一个关于我可以用作通用 NSManagedObject 的“区分”数字/属性一个 ID 号(我不能使用名称 b/c 我想允许用户创建具有相同名称的实体)。如果这不存在,请解释我将如何重新创建它。我知道我可以为此添加一个属性并增加一个静态变量(例如:currentId),但是如果我这样做了,那么我必须考虑删除一个实体,那么我如何在逻辑上将下一个插入的实体放在该索引处然后返回到最后一个索引。

【问题讨论】:

    标签: iphone objective-c core-data nsmanagedobject


    【解决方案1】:

    Core Data 没有自动递增 ID 字段的概念,请记住 Core Data 是一个对象图,而不是数据库。恰好数据存储可以由数据库系统支持,一个完美的例子是 SqlLite。

    NSManagedObjectId 有点像带有唯一 GUID 的 URL。如果你想要某种自动递增的 id,你必须自己处理,显然有很多不同的方法可以解决这个问题。您可以有一个单独的实体来存储分配的最后一个 ID,并在每次创建新记录时读取它,增加值,将其用作新 ID 并增加存储的值。如果您不想重复使用 ID,这将解决您的删除问题。这里有明显的并发问题,您可能需要解决。另一种方法是将 ID 存储在文件系统或 NSUserDefaults 中的文件中,只要确保考虑并发性,不要意外分配相同的 ID 两次。

    【讨论】:

      【解决方案2】:

      NSManagedObjects 有一个 objectID 方法,尽管我不相信它们是按任何顺序创建的。

      我个人只会使用 ID 属性。我不明白为什么删除会导致任何问题。 ID 只是在幕后,没有任何真正的理由向用户展示它,对吧?

      【讨论】:

      • 正确,这是可行的,用户永远不会看到它们,但我正在研究原始值限制,如果用户添加的实体值超过(例如)int 值最大值(其中很有可能在我的程序中发生)然后错误开始发生。
      • 我的下一个问题是 id 的用途是什么?您希望它为您完成哪些 objectID 方法没有完成的任务?
      • 潜在地将核心数据方案同步到在线数据库。
      【解决方案3】:

      您似乎可以在实体上使用 NSNumber 标识行,然后简单地跟踪您拥有的对象数量(通过保留 var 或从存储中获取最大值)。

      在这里,我找到了一些可以帮助您实现目标的示例。

      link

      【讨论】:

        猜你喜欢
        • 2012-07-18
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多