objective-c - 在没有新获取的情况下更新 NSFetchedResultsController 的结果

标签 objective-c caching core-data

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

  1. 从 Core Data(SQLite 数据存储,使用 NSFetchedResultsController)获取数据并显示它
  2. 在后台从 MySQL 服务器抓取新项目
  3. 使用新数据集(新旧项)刷新当前 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/

相关文章:

ios - VoiceLayer iOS obj c

java - 使用Guava Cache在多个服务实例上进行分布式缓存同步

ipad - iPad 应用程序缓存事件无法更新屏幕

ios - NSFetchedresultsController 部分 Name KeyPath 基于当前位置和其他位置之间的范围

ios - 核心数据获取上的 EXC_BAD_ACCESS(code=1, address=0x10)

objective-c - iOS AVFoundation captureStillImageAsynchronouslyFromConnection :completionHandler: Hanging Indefinitely

ios - 如何识别这个数组中某些字符的索引?

iphone - 使用自定义键盘调用 textFieldShouldReturn

html - 为静态内容缓存cdn服务?

ios - iPhone 和 Apple Watch 应用程序之间的核心数据共享