【问题标题】:Update results of NSFetchedResultsController without a new fetch更新 NSFetchedResultsController 的结果而不进行新的 fetch
【发布时间】:2010-11-02 22:07:19
【问题描述】:

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

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

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

[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
                              inManagedObjectContext:[fetchedResultsController
                                                      managedObjectContext]];

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

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

【问题讨论】:

    标签: objective-c caching core-data


    【解决方案1】:

    只是有您的问题,是的,显然使用通知是您可以在表格使用 nsfetchedresults 控制器时刷新表格视图的独特方式。

    就像在核心数据手册示例中一样:
    步骤 1: 为通知 NSManagedObjectContextDidSaveNotification 添加一个观察者到 NSNotificationCenter
    步骤 2: 保存您的上下文(通知触发到您的选择器)
    步骤 3: 在您的选择器方法中:使用方法 mergeChangesFromContextDidSaveNotification 合并上下文中的更改
    步骤 4: 从通知中删除观察者中心。

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

    【讨论】:

    • 这确实是我使用的方法,我认为这是 Apple 在他们的一些 Core Data 示例中的做法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多