0

我正在使用一个简单的 Master Detail 场景,其中 master 使用获取的结果控制器来填充其 tableview。选择一行时,相应的nsmanageBject将传递给详细信息控制器,用于填充一些尿布尔。我添加了一个 EditorViewController 以允许用户更新某些字段。保存时,我关闭 EditorViewController 并返回到 Detail 视图控制器。保存使用分配给 NSManagedObject 的上下文。

知道相关对象已更改以便我可以在 Detail VC 中更新 UI 的最佳方法是什么?目前,如果我尝试更新 Detail VC 中的 UILabel,我看不到对象属性的任何新值。我知道委托/协议方案可能会起作用,但我很好奇是否已经存在可以使用的东西——我可以寻找更新对象的通知,或者我是否应该在详细信息屏幕上有一个获取的结果控制器?不确定在这里采取的正确路径。

4

3 回答 3

2

NSFetchedResultsController是这个问题最常见的解决方案。它监听上下文的变化并相应地更新表格视图的内容。你的问题比较笼统,所以我会留下一个非常好的文章的链接,展示如何正确使用它

于 2013-10-29T14:28:23.943 回答
0

您可以使用NSFetchedResultsController并注册该对象的获取请求(我认为这是一个很好的解决方案)。或者,您可以收听类似的通知NSManagedObjectContextDidSaveNotification,但我不建议这样做。或者您可以将一个对象传递给您的 EditorViewController 并直接在那里更新属性。

于 2013-10-29T14:28:17.207 回答
0

没有看到任何代码就很难说你要做什么,但是使用 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

或者,您可以尝试键值观察?但我不确定它是否适合您的情况。

于 2013-10-29T14:34:55.700 回答