什么可能导致mergeChangesFromContextDidSaveNotification不合并/无效已更新的对象?

XJo*_*nes 7 iphone core-data nsmanagedobjectcontext ios

[编辑:问题的简化版]

  1. mainMOC 是主要的托管对象上下文

  2. editorMOCeditorViewController使用撤消管理器创建的托管对象上下文,因此用户可以编辑单个托管对象

  3. editorMOC保存后,mainMOC刷新通知处理程序中的更新的托管对象NSManagedObjectContextDidSaveNotification

  4. 在保存处理程序中,如果我使用[mainMOC refreshObject:obj mergeChanges:YES]对象的更新,则不会在mainMOC后刷新中反映出来.如果我使用[mainMOC refreshObject:obj mergeChanges:NO]该对象失效,并且在下一个故障时,更改将反映在从商店加载的数据中.

问题:为什么对象在mergeChanges:YES指定时不反映更新?

[原始问题]

我有一个基于核心数据的应用程序,具有多个托管对象上下文.该应用程序是复杂和专有的,所以我不能直接从应用程序共享代码.我创建了一个简单的测试应用程序,试图重现我的问题,但测试应用程序没有出现问题.我无法在实现之间找到逻辑差异.我为没有发布示例代码而道歉,我相信我在下面解释了实现.如果问题不明确,请在评论中提问,我会尽力澄清.

这是我的情况.下面描述的所有内容都在主线程上运行.

  1. 该应用程序有一个主要的托管对象上下文mainMOC,在主线程上访问,用于NSFetchedResultsControllers在各种表视图中显示数据.

  2. 我有一个调用的视图控制器EditorViewController,允许编辑特定实体的现有对象.此视图控制器editorMOC使用具有撤消管理器的相同持久性存储协调器创建自己的托管对象上下文,以便在解除编辑器时可以回滚或保存更改.

  3. EditorViewController正在观察NSManagedObjectContextDidSaveNotification.发生此通知时,通知处理程序调用[_mainMOC mergeChangesFromContextDidSaveNotification:notification]以将更改合并editorMOCmainMOC.

  4. 使用a的表视图控制器NSFetchedResultsController正在处理控制器委托消息.

我已经添加了NSLog输出来查看上述所有步骤中发生的情况,并且我已经验证了以下内容:

  • 我可以看到对象被修改并保存在编辑器中.
  • 我可以看到NSManagedObjectContextDidSaveNotification被调用并且包含更新的对象.
  • 我可以看到获取的结果控制器正在接收controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:协议消息.
  • 我可以看到,这mainMOC没有反映更新,并且更新的对象没有被无效mergeChangesFromContextDidSaveNotification:.
  • 如果我退出并重新启动应用程序,则会提交更新

作为参考,我的主应用程序和测试应用程序都实现了上述功能,但测试应用程序显示正确合并的更新,主应用程序没有.

我正在寻找关于什么会导致mergeChangesFromContextDidSaveNotification:不能成功合并和/或使更新的对象无效的建议.

谢谢!

XJo*_*nes 0

为了努力接受某些事情,即使我没有明确的解决方案,这就是我为解决这个问题所做的事情,问题似乎已经解决了。

我相信这是 NSFetchedResultsController 的缓存问题。此后我简化了这段代码并确保每个 NSFetchedResultsController 使用它自己的缓存。我已经能够删除对“refreshObject”的调用,并且一切似乎正常工作。