設置:避免多個NSManagedObjectContexts之間的無限遞歸同步
我有兩個託管的上下文設置(在iPhone應用程序上)。我用於大多數查詢的主要上下文以及用於我想要在後臺發生的長時間運行操作的背景上下文。
我已經針對每個託管對象上下文爲NSManagedObjectContextDidSaveNotification設置了通知。爲了響應通知,我調用mergeChangesFromContextDidSaveNotification來同步。這也是一個要求,任何時候在主要環境中發生變化時,我都需要在後臺環境中運行一些工作,因爲狀態現在已經改變了。
這工作正常,只要寫在上下文中的一個。在這種情況下,寫在主要的上下文中。但是,如果我在背景上下文中編寫,則會導致無限循環。保存在背景上下文觸發通知主要上下文,然後合併更改並觸發自己的通知,由背景上下文獲取。這觸發後臺上下文執行其後臺作業,而後者(如果他們寫入任何內容)會再次啓動該循環。
看來,這是錯誤的設置,或者我需要一種方法來解耦「更改通知中的任何時候在主要上下文中發生變化時啓動處理後臺作業」,或者我需要使背景上下文讀取-只要。
想法?與典型的「第二上下文是導入」場景不同的是,我相信我需要/希望我的背景上下文關於主要上下文保持最新,以便從我的背景中獲得正確的結果工作。
我不知道你的具體應用程序,但是在一般的CS中,如果你有一個循環依賴,你必須檢測/中斷,你可以添加狀態(在包含上下文的範圍內的附加變量),所以你'重新實施「標記和掃描」。 – 2010-07-28 23:39:37