在后台线程中将数据同步到服务器:核心数据中的多个上下文

Posted

技术标签:

【中文标题】在后台线程中将数据同步到服务器:核心数据中的多个上下文【英文标题】:Syncing data to server in a background thread: multiple-contexts in core data 【发布时间】:2016-05-26 13:42:23 【问题描述】:

我有两个 NSManagedObjectContext :作为主要上下文的 parentContext 和带有 PrivateQueueConcurrencyType 的 childContext。 使用 childContext 我在后台线程中将数据同步到服务器,同步成功后我设置data.isSynced = true

用户可能会在同步期间更改数据。这将通过设置data.isSynced = false 将数据标记为脏数据。

两个线程(主线程和同步线程)同时运行,如果 parentContext 具有 data.isSynced == false 而 childContext 具有 data.isSynced == true,则可能会出现糟糕的情况。调用 childContext.save() 将覆盖 parentContext 中的更改,我会错过更改并且不会再次将更新的数据同步到服务器。

如何改进当前的设计? 有没有办法自定义父子上下文之间的合并?

【问题讨论】:

【参考方案1】:

不要使用单个布尔标志,而是使用 2 个日期。一个日期用于最后一次编辑,另一个日期用于最后一次同步。它们每个都只从 1 个线程更新。后台线程将读取两者以检查是否需要同步数据,但这很好。

【讨论】:

以上是关于在后台线程中将数据同步到服务器:核心数据中的多个上下文的主要内容,如果未能解决你的问题,请参考以下文章

在后台线程中将核心数据从一个数据库复制到另一个数据库

是否自动在后台线程中将数据发布到 api

如何在目标 c 中将核心数据对象同步到 Web 服务

核心数据单一托管对象上下文和两个线程

Swift:在后台同步核心数据对象

从后台线程保存数据时核心数据崩溃