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

时间:2016-05-26 13:42:24

标签: swift multithreading core-data nsmanagedobject nsmanagedobjectcontext

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

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

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

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

1 个答案:

答案 0 :(得分:1)

请勿使用单个bool标志,而是使用2个日期。一个日期用于最后一次编辑,另一个日期用于上次同步。它们每个都只从1个线程更新。后台线程将读取两者以检查是否需要同步数据但是没关系。