为啥在没有明确合并的情况下,更改可能会从一个 NSManagedObjectContext 填充到另一个?
Posted
技术标签:
【中文标题】为啥在没有明确合并的情况下,更改可能会从一个 NSManagedObjectContext 填充到另一个?【英文标题】:Why might changes be populated from one NSManagedObjectContext to another without an explicit merge?为什么在没有明确合并的情况下,更改可能会从一个 NSManagedObjectContext 填充到另一个? 【发布时间】:2010-03-18 19:57:27 【问题描述】:我正在开发一个利用多线程/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 组合。
我的理解是,除非明确这样做,否则不会合并任何更改...有人知道这里发生了什么吗?
【问题讨论】:
【参考方案1】:我的理解是,除非明确这样做,否则不会合并任何更改...
这是不正确的。我猜在您的5)
之后,您在主要上下文中重新获取了Artists
,对吧?任何获取总是下到磁盘,访问文件。如果那是在从不同的上下文保存之后,那将获取您刚刚创建的新条目。如有冲突,按照您的mergePolicy
处理,见this Apple doc。
【讨论】:
以上是关于为啥在没有明确合并的情况下,更改可能会从一个 NSManagedObjectContext 填充到另一个?的主要内容,如果未能解决你的问题,请参考以下文章
在没有 SVN 客户端的情况下应用 TortoiseSVN 补丁