0

我正在开发一个利用多个线程/NSManagedObjectContexts 的对象导入功能,使用http://www.mac-developer-network.com/columns/coredata/may2009/作为我的指南(请注意,我正在为 iPhone 开发)。

出于某种原因,当我保存我的一个上下文时,另一个会立即更新更改,即使我已经注释掉了我对 mergeChangesFromContextDidSaveNotification 的调用。在没有明确调用的情况下,上下文可能会相互合并,是否有任何原因?

这里是发生了什么的日志:

// 1.) Main context is saved with "Peter Gabriel"
// 2.) Test context is created, begins with same contents as main context
// 3.) Main context is inserted with "Spoon"
// 4.) Test context is inserted with "Phoenix"

// Contents at this point:

CoreTest[4341:903] Artists in main context: (
    "Peter Gabriel",
    "Spoon"
)
CoreTest[4341:903] Artists in test context: (
    "Peter Gabriel",
    "Phoenix"
)

// 5.) testContext is saved

// New contents of contexts:

CoreTest[4341:903] Artists in main context: (
    "Peter Gabriel",
    "Phoenix",
    "Spoon"
)
CoreTest[4341:903] Artists in test context: (
    "Peter Gabriel",
    "Phoenix"
)

如您所见,测试上下文在中途被保存,并且主上下文突然具有来自测试上下文的新对象,即使我还没有执行整个 NSManagedObjectContextDidSaveNotification/mergeChangesFromContext 组合。

我的理解是,除非明确这样做,否则不会合并任何更改……有人知道这里发生了什么吗?

4

1 回答 1

1

我的理解是,除非明确这样做,否则不会合并任何更改...

这是不正确的。我猜5)Artists在主上下文中重新获取之后,对吧?任何获取总是下到磁盘,访问文件。如果那是在从不同的上下文中保存之后,那将获取您刚刚创建的新条目。如果有冲突,将根据您的处理mergePolicy,请参阅此 Apple 文档

于 2010-03-19T04:59:46.410 回答