在后台线程中将数据同步到服务器:核心数据中的多个上下文
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 个线程更新。后台线程将读取两者以检查是否需要同步数据,但这很好。
【讨论】:
以上是关于在后台线程中将数据同步到服务器:核心数据中的多个上下文的主要内容,如果未能解决你的问题,请参考以下文章