[英]Merging multiple child managed object contexts
在我的iOS應用程序中,我嘗試將核心數據與Web后端同步。 我想使用單獨的后台托管對象上下文進行同步,以便在處理同步時,我的主上下文可以自由地接受來自ui的更改。 根據此博客文章http://www.cocoanetics.com/2012/07/multi-context-coredata/,這兩個上下文都是我的寫入磁盤上下文的子級。
我的問題是,在保存到磁盤之前,如何合並兩個子上下文?
如果我訂閱了contextDidSaveNotifications,則可以使用合並上下文
[mainContext mergeChangesFromContextDidSaveNotification:syncFinishedNotification];
但是根據文檔...“此方法刷新在其他上下文中已更新的所有對象,在任何新插入的對象中出現故障,並在已刪除的對象上調用deleteObject ::。”
我不想刷新更新的對象並丟失對mainContext所做的更改,而是合並兩個更改集。
我是多上下文核心數據的新手,所以我可能以錯誤的方式想到了這一點。
有任何想法嗎?
合並核心數據中的更改始終是在一個托管對象上下文中進行更改,然后將其應用於另一上下文的過程。 如果兩個上下文可能同時獲取新的更改,則合並將受上下文的合並策略影響。 如果沒有沖突的更改,則無需擔心。 不過,如果可能,您需要選擇適當的合並策略。
如果不執行任何NSErrorMergePolicyType
,則默認值為NSErrorMergePolicyType
,這意味着在合並更改后保存更改將失敗。 您幾乎肯定不想要那樣。 但是,還有其他預定義的策略可供選擇。 在這里, NSMergeByPropertyObjectTrumpMergePolicyType
通常是一個不錯的選擇,因為它優先考慮未保存的沖突更改。 因此,如果同步上下文對用戶正在編輯的對象進行了沖突的更改,則將保留用戶的更改。 還有其他一些罐裝選項。 如果它們都不適合,則您始終可以NSMergePolicy
子類,然后執行您喜歡的任何事情。 不過,這幾乎沒有必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.