核心数据NSManagedObject更改

时间:2013-10-29 14:21:52

标签: ios iphone objective-c core-data

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

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

3 个答案:

答案 0 :(得分:2)

NSFetchedResultsController是解决此问题的最常见方法。它会侦听上下文中的更改并相应地更新表视图的内容。你的问题相当普遍,所以我会leave a link to a very good article showing how to use it properly

答案 1 :(得分:0)

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

答案 2 :(得分: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

或者,你可以try Key Value Observing?,但我不确定它适合你的情况。