Ios 跨上下文传递ManagedObject ID

Ios 跨上下文传递ManagedObject ID,ios,core-data,Ios,Core Data,情景: 我正在处理2个ViewController,每个都有自己的上下文(同一线程)。我试图通过委托方法从MOC2->MOC1传递managedObject的objectID。好吧,那样做了,似乎通过了ObjectID 问题就在这里……从MOC1(代理)我通过[self.localMOC objectWithID:thePassdide]获得了指向新对象的指针。我在找到的对象上运行了一个NSLog,日志描述了它,它似乎被找到了。现在,当我试图在更新的“获取结果”控制器中找到它时,它无法找到,即使

情景:

我正在处理2个ViewController,每个都有自己的上下文(同一线程)。我试图通过委托方法从MOC2->MOC1传递managedObject的objectID。好吧,那样做了,似乎通过了ObjectID

问题就在这里……从MOC1(代理)我通过
[self.localMOC objectWithID:thePassdide]
获得了指向新对象的指针。我在找到的对象上运行了一个NSLog,日志描述了它,它似乎被找到了。现在,当我试图在更新的“获取结果”控制器中找到它时,它无法找到,即使它在表视图中显示了使用同一结果控制器的对象

以下是日志语句…
通过objectWithID:
(实体:帐户;id:0x6db44b0;数据:)创建对象。

结果控制器对象:
(实体:帐户;id:0x6b50250;数据:)

看起来一个是永久ID,另一个是临时ID,以及完全不同的内存地址

关于我做错了什么,有什么线索吗

以下是流程:


每个托管对象上下文都应注册为来自其他上下文的“did保存”通知(NSManagedObjectContextDidSaveNotification)的观察者,以便在保存时使用
mergeChangesFromContextDidSaveNotification:

我认为ObjectID的两种不同形式表明第一种形式(不是以
/p9
结尾)意味着它已插入但尚未保存。您确定它是在那一点上吗?您通常可以通过检查备份核心数据的.sqlite文件内部来备份它(注意:这是实施细节)使用sqlite3从Z中选择*其中Z_pk=9;

在重新设计后,我使用了iOS5父/子MOC。我仍然不完全理解为什么对象ID,即使它们是永久ID,在上下文之间返回不同的对象。这显然与它的合并有关,即使我在之后重新读取了数据r完全保存。希望随着时间的推移,核心数据的内部工作对我来说会逐渐变得更有意义。不过感谢您的建议。

在您从新对象获取objectID之前, 在NSManagedObjectContext中使用AcquitainPermanentIDsforObjects方法。
它可以在不等待保存的情况下为您获取一个perm id。

我知道MOC 1正在更新,因为新的托管对象(或它的某种形式)正在更新不会显示在“表视图和获取结果”控制器中。另外,我需要使用委托方法来传递ObjectID。可能会有更新和更新?如果您有两个单独的上下文并进行更改,您必须以某种方式同步数据,您目前是如何做到的?通过NSManagedObject的重置方法。我认为ObjectID是每个托管对象的专用对象,它主要用于获取对该对象的引用。如果没有“ID”值,人们将如何检索该对象?让我困惑的是,该对象声称是在上下文中找到的。