在后台线程中将数据同步到服务器:核心数据中的多个上下文
Syncing data to server in a background thread: multiple-contexts in core data
我有两个 NSManagedObjectContext
:parentContext 是主上下文,childContext 是 PrivateQueueConcurrencyType
。
使用 childContext 我在后台线程中将数据同步到服务器,同步成功后我设置 data.isSynced = true
.
用户可能会在同步期间更改数据。这将通过设置 data.isSynced = false
.
将数据标记为脏数据
两个线程(主线程和同步线程)同时 运行,如果 parentContext 有 data.isSynced == false
而 childContext 有 data.isSynced == true
,这里可能会发生糟糕的情况。调用 childContext.save()
将覆盖 parentContext 中的更改,我将错过更改并且不会再次将更新的数据同步到服务器。
如何改进当前的设计?
有没有办法自定义父子上下文之间的合并?
不要使用单个 bool 标志,而是使用 2 个日期。一个日期是最后一次编辑,另一个是最后一次同步。它们每个都只从 1 个线程更新。后台线程将读取两者以检查是否需要同步数据,但这没关系。
我有两个 NSManagedObjectContext
:parentContext 是主上下文,childContext 是 PrivateQueueConcurrencyType
。
使用 childContext 我在后台线程中将数据同步到服务器,同步成功后我设置 data.isSynced = true
.
用户可能会在同步期间更改数据。这将通过设置 data.isSynced = false
.
两个线程(主线程和同步线程)同时 运行,如果 parentContext 有 data.isSynced == false
而 childContext 有 data.isSynced == true
,这里可能会发生糟糕的情况。调用 childContext.save()
将覆盖 parentContext 中的更改,我将错过更改并且不会再次将更新的数据同步到服务器。
如何改进当前的设计? 有没有办法自定义父子上下文之间的合并?
不要使用单个 bool 标志,而是使用 2 个日期。一个日期是最后一次编辑,另一个是最后一次同步。它们每个都只从 1 个线程更新。后台线程将读取两者以检查是否需要同步数据,但这没关系。