我正在使用一个使用多个线程/ 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组合。
我的理解是,除非明确说明,否则不会合并任何变更......有谁知道这里发生了什么?
答案 0 :(得分:1)
我的理解是,除非明确这样做,否则不会合并任何更改......
这不正确。我想在你5)
之后,你在主要背景下反映了Artists
,对吗?任何提取总是下载到磁盘,访问该文件。如果那是在从不同的上下文保存之后,那将获取刚刚创建的新条目。如果存在冲突,则会根据您的mergePolicy
处理这些冲突,请参阅this Apple doc。