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