更新NSFetchedResultsController的结果而不进行新的提取

Tim*_*Tim 7 caching core-data objective-c

我正在开发一个应用程序,它将数据保存在外部MySQL服务器中,但使用Core Data在本地缓存它以获得更好的响应时间.基本上,我想做的是:

  1. 从Core Data(SQLite数据存储,使用NSFetchedResultsController)获取数据并显示它
  2. 在后台从MySQL服务器获取新项目
  3. 使用新的数据集(新旧项目)刷新当前表视图

除了最后一步,我完成了所有这些工作.我无法弄清楚如何使NSFetchedResultsController更新其数据集.到目前为止,我已经尝试将项目直接添加到其NSManagedObjectContext:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
                              inManagedObjectContext:[fetchedResultsController
                                                      managedObjectContext]];
Run Code Online (Sandbox Code Playgroud)

我也尝试了Apple在他们的CoreDataBooks示例中所做的事情,并使用了单独的"添加"托管对象上下文和调用mergeChangesFromContextDidSaveNotification:.似乎都没有改变当前在我的获取结果控制器的托管对象上下文中的NSManagedObject*的集合.

我如何更新NSFetchedResultsController当前管理的对象集?

use*_*806 7

只是有你的问题,是的,显然使用通知是一种独特的方式,当表使用nsfetchedresults控制器时,你可以刷新tableview.

在核心数据手册示例中:
step1:向NSNotificationCenter添加观察者以获取通知NSManagedObjectContextDidSaveNotification
step2:保存上下文(通知触发器到选择器)
step3:在您的选择器方法中:使用方法mergeChangesFromContextDidSaveNotification
step4合并上下文中的更改:从通知中心删除观察者.

我个人想绕过通知证书,只告诉上下文刷新自己该死的:)


Tim*_*Tim 4

我发现我的问题不是对象没有更新,而是我拥有的 NSFetchedResultsController 实例没有正确更新其部分索引标题,因此我无法在 UITableView 中看到结果。

从获取的结果控制器更新托管对象上下文确实会更新控制器的结果对象集。