1

我有两个托管对象上下文,比如指向同一个持久存储的 MMC 和 BMC。分别由主线程(MT)和后台线程(BT)创建

我的所有实体中都有两个字段 delta 和修订号,这两个上下文都在更改。

现在,BT 从持久存储中的对象 obj1 中获取值并将它们发布到服务器。当服务器回复时,它会为 obj1 提供一个新的增量和一个新的修订号。

此外,当 BT 进入服务器时,MMC 中的值会被修改,但不会保存到持久存储中。

我想将从服务器返回的增量和修订号保存到持久存储中,但前提是 - 当后台线程忙于将服务器带到服务器时,MMC 中的修订号没有改变。

如果是我想保留 MMC 的增量和修订号。

我怎么可能做到这一点?

4

1 回答 1

1

只需保存更改,确保每个线程都在观察NSManagedObjectContextDidSaveNotification另一个线程的上下文,并确保使用正确的合并策略。当后台线程保存更改时,主线程会收到通知并调用mergeChangesFromContextDidSaveNotification:. 然后:

  • 如果“MMC”没有变化:完成。没有其他事情发生,但是如果 MMC 加载更新的对象,它会获取从服务器接收到的值。
  • 如果“MMC”更改:如果“MMC”的合并策略是NSMergeByPropertyObjectTrumpMergePolicy,则保留MMC 中未保存的更改。持久存储具有来自服务器的值,但是一旦您在 MMC 上保存更改,MMC 的值就会覆盖这些值。

因此,尽管您每次都会从服务器保存更改,但您不会丢失 MMC 中的任何新更改。一旦你从那里保存,你就会得到输入的任何新值。

于 2013-07-19T17:02:10.680 回答