【问题标题】:Core Data: Merging multiple Managed Object Contexts and deleting objects核心数据:合并多个托管对象上下文和删除对象
【发布时间】:2011-01-27 15:40:43
【问题描述】:

我有一个 iPhone 项目,其中在主应用程序线程的托管对象上下文中有一系列托管对象。在一个单独的线程中,我将新对象从网络服务器导入到第二个托管对象上下文中。

如果导入顺利且没有错误,我会保存导入上下文。这会触发我调用 mergeChangesFromContextDidSaveNotification 的 contextDidSave。两个上下文合并好了。到目前为止,一切顺利。

我想要的功能是删除原始 MOC 但不在导入的 MOC 中的任何对象(想法是用户正在刷新数据,因此应该删除旧数据),但是合并似乎只是结合了 2 个 MOC。

您能否告知是否有一种方法可以管理 2 个 MOC 的合并,以便在另一个中删除那些不在其中的 MOC?

【问题讨论】:

  • 抱歉,澄清一下 - 正在导入的对象会针对主 MOC 进行测试,以查看它们是否存在。如果他们这样做了,那么我会获取它们并更新它们。如果他们不这样做,那么我创建它们。我只是纠结于如何确定主 MOC 中的项目是否在 importMOC 中。我不想重置 mainMOC,只是盲目地复制所有内容。

标签: iphone object core-data managed


【解决方案1】:

当您创建新 moc 时,它可以访问所有旧对象,因此您可以在后台线程上处理删除作为导入的一部分。

【讨论】:

  • 谢谢 - 我最终检查了 moc 中的所有对象,并查看它们是否在要导入的对象集合中。如果不是,我在导入 moc 中删除了它们。因此,当 mocs 被合并时,我不想要的对象被删除了。
【解决方案2】:

您所描述的不仅仅是进口。决定哪些对象被“更新”的逻辑是特定于应用程序的。您可以通过获取这些对象并更新它们而不是创建新实例来在导入线程上处理它,或者您可以在会议后完成工作。在这两个选项中,我更喜欢第一个,因为它更符合 Core Data 的方式。

【讨论】:

    【解决方案3】:

    我在这种情况下所做的是一种方法“prepareForDelet”,它将属性“删除”标记为“是”。 然后当我导入我的对象时,如果一个已经存在,我标记为删除 NO。 当我的线程结束时,我可以删除所有删除为 YES 的对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2023-04-08
      • 2023-04-02
      相关资源
      最近更新 更多