我有两个托管对象上下文,比如说MMC和BMC指向同一个持久存储。分别由主线程(MT)和后台线程(BT)创建
我的所有实体中都有两个字段delta和版本号,两个上下文都在更改这些字段。
现在,BT从持久存储中获取来自Object obj1的值并将它们发布到服务器。当服务器回复时,它为obj1提供新的delta和新的修订号。
此外,当BT进入服务器时,MMC中的值正在被修改,但不会保存到持久存储中。
我想将从服务器返回的增量和修订号保存到持久存储中,但仅当 - 后台线程忙于服务器时,修订号在MMC中没有更改。
如果是这样的话,请保留MMC的delta和版本号。
我怎么可能实现这个目标?
答案 0 :(得分:1)
只需保存更改,确保每个线程都在观察NSManagedObjectContextDidSaveNotification
其他线程的上下文,并确保使用正确的合并策略。当后台线程保存更改时,主线程获取通知并调用mergeChangesFromContextDidSaveNotification:
。然后:
NSMergeByPropertyObjectTrumpMergePolicy
,则会保留MMC中未保存的更改。持久性存储具有来自服务器的值,但只要您在MMC上保存更改,MMC的值就会覆盖这些值。因此,虽然您每次都会从服务器保存更改,但您不会丢失MMC中的任何新更改。只要您从那里保存,您就可以获得输入的任何新值。