2013-07-19 41 views
1

我有兩個託管對象上下文,例如MMC和BMC指向相同的持久性存儲。分別由主線程(MT)和後臺線程(BT)分別創建保存在一個託管上下文中,其他託管對象上下文中沒有更改

在兩個上下文中,我的所有實體中都有兩個字段增量和修訂號。

現在,BT從持久性存儲中獲取來自Object obj1的值,並將它們發佈到服務器。當服務器回覆時,它會爲obj1提供一個新的增量和一個新的修訂版本號。

此外,雖然BT正在服務器,MMC中的值正在修改,但未保存到持久性存儲。

我想將從服務器返回的增量和修訂號保存到持久性存儲中,但只有當後臺線程正忙於服務器時,修訂號纔會在MMC中被更改。

如果是我想保留MMC的增量和修訂號。

我怎麼可能做到這一點?

回答

1

只保存更改,請確保每個線程正在爲其他線程的上下文觀察NSManagedObjectContextDidSaveNotification,並確保使用正確的合併策略。當後臺線程保存更改時,主線程會收到通知並致電mergeChangesFromContextDidSaveNotification:。然後:

  • 如果「MMC」上沒有更改:完成。沒有其他事情發生,但是如果MMC加載更新的對象,它會從服務器接收到值。
  • 如果有「MMC」上的更改:如果「MMC」的合併策略是NSMergeByPropertyObjectTrumpMergePolicy,則保留MMC中未保存的更改。持久性存儲具有來自服務器的值,但只要在MMC上保存更改,MMC的值就會覆蓋這些值。

因此,儘管您每次都會從服務器保存更改,但不會丟失MMC中的任何新更改。只要您從那裏保存,您就可以獲得輸入的任何新值。

相關問題