我正在开发一个将其数据保存在外部 MySQL 服务器中的应用程序,但使用 Core Data 将其缓存在本地以获得更好的响应时间。基本上,我想做的是:
- 从 Core Data(SQLite 数据存储,使用 NSFetchedResultsController)获取数据并显示它
- 在后台从 MySQL 服务器抓取新项目
- 使用新数据集(新旧项)刷新当前 TableView
除了最后一步,我已经完成了所有这些工作。我不太明白如何让 NSFetchedResultsController 更新它的数据集。到目前为止,我已经尝试将项目直接添加到它的 NSManagedObjectContext 中:
[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
inManagedObjectContext:[fetchedResultsController
managedObjectContext]];
我还尝试了 Apple 在他们的 CoreDataBooks 示例中所做的事情,并使用了单独的“添加”托管对象上下文和对 mergeChangesFromContextDidSaveNotification:
的调用。似乎都没有更改当前在我获取的结果 Controller 的托管对象上下文中的 NSManagedObject* 集。
我将如何更新 NSFetchedResultsController 当前管理的对象集?
最佳答案
只是有你的问题,是的,显然使用通知是当表使用 nsfetchedresults Controller 时刷新 TableView 的独特方式。
就像在核心数据手册示例中一样:
step1: 为通知NSManagedObjectContextDidSaveNotification添加一个观察者到NSNotificationCenter
第 2 步: 保存上下文(选择器的通知触发器)
第 3 步: 在您的选择器方法中:使用 mergeChangesFromContextDidSaveNotification 方法合并上下文中的更改
step4:从通知中心移除观察者。
就我个人而言,我想绕过通知证书,只告诉上下文刷新你自己该死的:)
关于objective-c - 在没有新获取的情况下更新 NSFetchedResultsController 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994359/