1

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

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

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- 是否有一种更简单(更简单或内置)的方式我错过了?我在文档中发现的没有任何建议。

4

2 回答 2

4

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

于 2010-12-25T15:51:04.157 回答
0

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

于 2010-12-25T14:02:01.127 回答