【问题标题】:Permanent NSManagedObject URI from temporary URI?来自临时 URI 的永久 NSManagedObject URI?
【发布时间】:2011-05-30 15:33:57
【问题描述】:

我有一个 NSManagedObject 子类,它存储子对象的 URI。它最初在第一次创建子对象时存储临时 URI,并在保存之前实现 -willSave 以在其 NSManagedObjectContext 上调用 -obtainPermanentIDsForObjects,以便只保留永久 ID。

不过,我遇到的问题是其他实例也存储临时 URI。当一个对象在另一个具有相同子对象的对象之后不久收到-willSave 消息时,它也会调用-obtainPermanentIDsForObjects 并获得一个不同的错误永久URI,从而导致后续Core数据错误错误如:

CoreData could not fulfill a fault for '0x102e4c110 <x-coredata://E17EE19B-E7F3-4102-ACFF-3E6F8BE8B104/MyEntityName/p2>'

我想要一种方法从 NSManagedObject 的旧的、临时的 URIRepresentation 到它已经生成的新的、永久的 URIRepresentation。

我最初的想法是存储我自己的 <temporary URI,permanent URI> 字典并在使用 -obtainPermanentIDsForObjects 之前进行查找 - 有没有更简单(更简单或内置)的方法我错过了?我在文档中没有找到任何建议。

【问题讨论】:

    标签: cocoa core-data uri nsmanagedobject nsmanagedobjectcontext


    【解决方案1】:

    我在创建子对象后立即通过-obtainPermanentIDsForObjects 调用获得了一个永久ID,在它属于任何父对象之前。这样,父对象永远不会看到临时 ID。这行得通,但我仍然很想知道是否有更好的解决方案。

    【讨论】:

      【解决方案2】:

      订阅您的托管对象上下文的NSManagedObjectContextDidSaveNotification。遍历NSInsertedObjectsKey 中的对象并获取它们的托管对象ID。此时,它们都将是正确的永久 id,您可以安全地获取 URI 并存储它。

      【讨论】:

      • 但是我如何将它们链接回我存储的临时 ID? ObjectID 是否仍然等效?
      • 好吧,老实说,我什至不会存储临时 ID。当然,我真的不知道你在用这些对象做什么或者你的应用程序是如何构建的,所以这很容易说。但由于对象在保存之前不会持久化,所以我只存储 perm id。
      • 我的类派生自 BWOrderedManagedObject,它使用 URI 来跟踪对象在多对多关系中的顺序,所以我需要在它们被保存之前处理它们 (@987654321 @)
      猜你喜欢
      • 2021-07-31
      • 2011-04-14
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多