我有一个NSManagedObject子类,它存储子对象的URI。它最初在初始创建子对象时存储临时URI,并在保存之前实现-willSave
在其NSManagedObjectContext上调用-obtainPermanentIDsForObjects
,以便只保留永久ID。
我遇到的问题是,其他实例也存储临时URI。如果在具有相同子项的另一个对象之后不久收到-willSave
消息,则它还会调用-obtainPermanentIDsForObjects
并获取不同的 错误的 永久URI ,导致后续的核心数据错误错误,如:
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
之前查看它 - 是否有更容易(更简单或内置)的方法,我错过了?我在文档中找不到任何内容。
答案 0 :(得分:4)
在创建子对象之前,我最终获得了-obtainPermanentIDsForObjects
调用的永久ID,然后它才属于任何父对象。这样,父对象永远不会看到临时ID。这有效,但我仍然急于想知道是否有更好的解决方案。
答案 1 :(得分:0)
订阅您的托管对象上下文NSManagedObjectContextDidSaveNotification
。遍历NSInsertedObjectsKey
中的对象并获取其托管对象ID。此时,它们都将是正确的永久ID,您可以安全地获取URI并存储它。