簡體   English   中英

核心數據NSManagedObject更改

[英]Core Data NSManagedObject Changes

我正在使用一個簡單的Master Detail場景,其中master使用獲取的結果控制器來填充其tableview。 選擇行時,相應的NSManagedObject將傳遞到詳細信息視圖控制器,在那里它用於填充一些UILabel。 我添加了一個EditorViewController,允許用戶更新一些字段。 在保存時,我關閉EditorViewController並返回Detail視圖控制器。 保存使用分配給NSManagedObject的上下文。

知道有問題的對象發生了變化的最佳方法是什么,以便我可以更新Detail VC中的UI? 目前,如果我嘗試更新Detail VC中的UILabel,我沒有看到對象屬性的任何新值。 我知道委托/協議方案可能會有效,但我很好奇是否有我可以使用的東西 - 我可以尋找更新對象的通知,或者我是否應該在詳細信息屏幕上有一個獲取結果控制器? 不確定在這里采取正確的道路。

NSFetchedResultsController是此問題的最常見解決方案。 它會偵聽上下文中的更改並相應地更新表視圖的內容。 你的問題相當籠統,所以我會留下一篇很好的文章鏈接,展示如何正確使用它

您可以使用NSFetchedResultsController並為該對象注冊獲取請求(我認為這是一個很好的解決方案)。 或者,您可以偵聽NSManagedObjectContextDidSaveNotification通知,但我不推薦它。 或者您可以將對象傳遞給EditorViewController並直接更新屬性。

很難說沒有看到任何代碼你想要什么,但使用CoreData的另一個常見模式是使用模型 - 視圖 - 控制器(MVC)范例來在數據存儲中將信息轉換為類變量,然后是接口使用該類變量。 您擔心在CoreData和類變量之間保存,更新和刷新數據與使用該數據的接口分開。

那么典型的工作流程是:

//User does something that creates new info
//Store that info permanently in CoreData
//Refresh the class Variable by loading from CoreData (you can also skip this by updating the class variable simultaneously while saving to CoreData, but this is really sloppy and problematic. Better to save then re-fetch)
//Update your interface from the class Variable

或者,您可以嘗試鍵值觀察? 但我不確定它適合你的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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