通过objectID访问托管对象

时间:2012-07-05 02:26:18

标签: iphone objective-c ios core-data

我有三种情况:

masterMOC - private queue tied to the persistent store, so physical saves happen here
----mainMOC - main queue tied to the UI, child of masterMOC
-------backgroundMOC - private queue, child of mainMOC

让我们看看我在mainMOC上创建一个Employee对象,然后保存mainMOC。然后我保存masterMOC(写入磁盘)。

现在,我已将Employee NSManagedObjectID保存在变量objectID中。我想在backgroundMOC上获得此Employee。 [backgroundMOC objectWithId:objectID]是否有此目的?它会转到持久性存储并使用该方法获取此对象吗?或者我是否必须预先形成获取请求?

2 个答案:

答案 0 :(得分:0)

你做得对。他们希望您使用ID在MOContexts之间传递对象。 objectWithId将命中持久存储并将对象加载到新状态。 你需要担心的唯一问题是这种情况。

您在MOContext中获取对象或创建新对象。 您尝试将objectID传递给另一个上下文而不保存 新的MOContext不会知道更新,如果你创建了一个新对象,objectID将不会在持久存储中,所以我认为它返回nil或者它没有定义。

答案 1 :(得分:0)

今年有一个名为“核心数据最佳实践”的WWDC视频,讨论了嵌套的MOC。但是要回答你的问题,是的,objectWithId将通过最少数量的MOC级别来查找对象。因此,如果您致电[backgroundMOC objectWithId:objectID]且该对象存在于mainMOC中,则会从mainMOC获取该对象,而无需一直前往masterMOC或数据库。