2013-09-30 99 views
0

我有一個NSManagedObject實例,它代表我的應用程序中的一個用戶。我保留這個實例並在視圖控制器之間傳遞它以便引用該接口。用戶實例所屬的託管對象上下文(MOC)是主隊列MOC,它是直接保存到持久存儲的專用隊列MOC的子項。讓NSManagedObject保持最新狀態同時保留它

我的核心數據持久存儲在後臺更新在單獨的背景隊列中。這些更新被保存到專用隊列MOC中,然後被提交到主專用隊列MOC,並隨後保存到持久存儲中。

我的問題是,我怎麼能確保用戶NSManagedObject實例將保持最新?我意識到refreshObject:mergeChanges:的存在,但是,設置一個NSManagedObjectContextDidSaveNotification觀察者來讓對象實例保持最新似乎很複雜。當試圖讓多個NSManagedObject實例保持最新時,我可以看到這種方法變得不穩定。

回答

1

根據經驗,最好的選擇是不要試圖保持它的最新狀態。你需要使用NSManagedObjectContextDidSaveNotification實現來保持你的上下文是最新的 - 你無法解決這個問題 - 但爲了獲得一個有效的對象,每次更新後你都需要重新查詢它。最簡單的方法將取決於應用程序,但我經常使用唯一的服務器生成的ID來傳遞對象,然後在需要時使用這些ID將它們從數據庫中提取出來。 (唯一的ID是必需的,因爲我通常使用API​​來使用它們,所以你的結果會有所不同)技術可能工作或可能不工作的唯一地方是你在本地產生數據的地方,還沒有)將它上傳到數據庫,它是永久ID。我通常會特別說明這些情況,並將設備ID與「真實」ID分開,只是爲了跟蹤它們直到獲得真實ID。任何沒有「真正的」ID的東西都是我的邏輯知道的東西,需要持久保存到服務器上,所以這對我很有用。

+0

當你說'唯一ID',你的意思是'NSManagedObject#objectID'?或者你在你的實體中插入額外的,特定於服務器的ID? –

+0

@LeviMcCallum我唯一用objectID的時候,就是我想要在兩個不同的MOC之間轉移;由於您無法自行處理託管對象,因此您必須通過對象ID獲取新對象。 – RonLugge

相關問題