gpt4 book ai didi

iphone - 什么会导致 mergeChangesFromContextDidSaveNotification 不合并/使已更新的对象无效?

转载 作者:可可西里 更新时间:2023-11-01 03:32:36 26 4
gpt4 key购买 nike

[编辑:问题的简化版本]

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

  2. editorMOC 是在 editorViewController 中创建的托管对象上下文,带有撤消管理器,因此用户可以编辑单个托管对象

  3. editorMOC 保存后,mainMOC 刷新 NSManagedObjectContextDidSaveNotification

    的通知处理程序中更新的托管对象
  4. 在保存处理程序中,如果我使用 [mainMOC refreshObject:obj mergeChanges:YES] 对象的更新不会反射(reflect)在 mainMOC 刷新后.如果我使用 [mainMOC refreshObject:obj mergeChanges:NO],对象将失效,并且在下一次故障时,更改会反射(reflect)在从存储加载的数据中。

问题:当指定 mergeChanges:YES 时,为什么对象不反射(reflect)更新?

[原始问题]

我有一个基于核心数据的应用程序,其中包含多个托管对象上下文。该应用程序复杂且专有,因此我不能简单地直接从该应用程序共享代码。我创建了一个简单的测试应用程序,试图重现我的问题,但测试应用程序没有出现问题。我一直无法找到实现之间的逻辑差异。对于没有发布示例代码,我深表歉意,我相信我在下面很好地解释了实现。如果有什么不清楚的地方,请在评论中提问,我会尽力澄清。

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

  1. 该应用程序有一个名为 mainMOC 的主要托管对象上下文,它在主线程上访问并与 NSFetchedResultsControllers 一起使用以在各种 TableView 中显示数据。

  2. 我有一个名为 EditorViewController 的 View Controller ,它允许编辑特定实体的现有对象。这个 View Controller 创建它自己的名为 editorMOC 的托管对象上下文,使用相同的持久存储协调器和撤消管理器,以便在关闭编辑器时可以回滚或保存更改。

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

  4. 使用 NSFetchedResultsController 的 TableView Controller 正在处理 Controller 委托(delegate)消息。

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

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

作为引用,我的主应用和测试应用都实现了上述功能,但测试应用显示更新已正确合并,而主应用没有。

我正在寻找有关导致 mergeChangesFromContextDidSaveNotification: 无法成功合并和/或使更新对象无效的原因的建议。

谢谢!

最佳答案

获取的结果 Controller 没有收到 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 委托(delegate)消息。相反,它将它发送给委托(delegate)以响应上下文中的更改。如果该委托(delegate)消息被发送并且确实包含正确的对象,那么主上下文就会知道这些变化。

如果是这样,那么您的错误很可能是在连接获取结果 Controller 和 TableView 的代码中。某些东西阻止了对象的正确显示。

关于iphone - 什么会导致 mergeChangesFromContextDidSaveNotification 不合并/使已更新的对象无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com