1

我有三种情况:

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

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

现在,我已将 Employee 保存NSManagedObjectID在一个变量 objectID 中。我想让这个员工在后台MOC。是否[backgroundMOC objectWithId:objectID]服务于这个目的?它会去持久化存储并使用该方法获取该对象吗?还是我必须执行提取请求?

4

2 回答 2

0

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

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

于 2012-07-05T04:02:02.410 回答
0

今年有一个名为“核心数据最佳实践”的 WWDC 视频,其中谈到了嵌套的 MOC。但要回答你的问题,是的,objectWithId将通过最少数量的 MOC 级别来找到对象。因此,如果您调用[backgroundMOC objectWithId:objectID]并且对象存在于 中mainMOC,它将从 中获取它,mainMOC而无需一路到达masterMOC或 数据库。

于 2012-07-05T04:23:20.457 回答