gpt4 book ai didi

ios - 合并多个子托管对象上下文

转载 作者:可可西里 更新时间:2023-11-01 05:55:01 24 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我试图将核心数据与 Web 后端同步。我想为同步使用一个单独的后台管理对象上下文,这样我就可以让我的主要上下文在处理同步时自由地接受来自 ui 的更改。根据这篇博文 http://www.cocoanetics.com/2012/07/multi-context-coredata/,这两个上下文都是我的写入磁盘上下文的子项.

我的问题是,如何在保存到磁盘之前合并两个子上下文?

如果我订阅了 contextDidSaveNotifications,我可以使用合并上下文

[mainContext mergeChangesFromContextDidSaveNotification:syncFinishedNotification];

但是根据文档...“此方法刷新在其他上下文中已更新的任何对象,任何新插入的对象中的错误,并在已删除的对象上调用 deleteObject::。”

我不想刷新更新的对象并丢失对 mainContext 所做的更改,而是合并两个更改集。

我是多上下文核心数据的新手,所以我可能以错误的方式思考这个问题。

有什么想法吗?

最佳答案

合并 Core Data 中的更改始终是在一个托管对象上下文中进行更改,然后将它们应用到另一个上下文的过程。如果两个上下文可能同时获取新更改,则合并会受到上下文合并策略的影响。如果没有冲突 更改,则无需担心。但是,如果可能的话,您将需要选择适当的合并策略。

如果您什么都不做,默认值为 NSErrorMergePolicyType,这意味着合并更改后保存更改将失败。你几乎肯定不想要那样。但是还有其他预定义的策略可供选择。 NSMergeByPropertyObjectTrumpMergePolicyType 在这里通常是一个不错的选择,因为优先考虑未保存的冲突更改。因此,如果同步上下文对用户正在编辑的对象进行了冲突的更改,则会保留用户的更改。还有一些其他 jar 装选项。如果它们都不适合,您始终可以子类化 NSMergePolicy 并做任何您喜欢的事情。不过,这很少是必要的。

关于ios - 合并多个子托管对象上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644732/

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