簡體   English   中英

合並多個子托管對象上下文

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM