3

根据苹果文档NSFetchedResultsController

您使用获取的结果控制器来有效地管理从核心数据获取请求返回的结果,以便为 UITableView 对象提供数据。

根据以下文件NSManagedObjectContext

它的主要职责是管理托管对象的集合。

这两个类的目的似乎重叠。两者都“管理获取的托管对象”。也许措辞的差异确实意味着什么,但我不明白。在阅读了这两个文档之后,在我看来,所有数据获取、修改、提交、撤消/重做等都是由托管上下文处理的。我没有看到 nsfrc 存在的意义。

当我们已经管理上下文来处理数据时,任何人都可以解释为什么我们需要获取结果控制器吗?

4

3 回答 3

4

ANSFetchedResultsController具有对 a 的引用NSManagedObjectContext

FRC 有责任根据您给它的标准从其 MOC 中获取和排序所有对象。

FRC 是一个实用程序类,用于处理来自给定 MOC 的对象。

例如 All People with firstName is 'John', sorted by lastName

如果您向 FRC 引用的 MOC 添加一个新人firstName = 'John',获取的结果控制器将解决它并发送一个委托回调。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    //do some stuff 
}

NSManagedObjectContext是一桶东西。这NSFetchedResultsController是从那个桶中挑选特定东西的一种方法。

于 2012-08-01T11:06:45.287 回答
4

NSManagedObjectContext是核心数据的一个基本概念,类似于关系数据中的事务。您不仅可以获取对象,还可以创建、更新和删除它们,将它们保存回持久存储等。

不需要NSFetchedResultsController. _ 它是一个实用程序类,旨在以一种易于在表格视图中使用的格式提供核心数据对象。在 an 中使用的获取对象NSFetchedResultsController将由 an 管理NSManagedObjectContext

话虽如此,“实用类”严重低估了它。它自动管理底层数据源中的更新、插入和删除、缓存、部分等,这些都是手动处理的痛苦。

于 2012-08-01T11:48:39.760 回答
1

获取的结果控制器仅获取一个集合并监视它的更改,以便可以自动更新表视图。您实际上并没有对NSFetchedResultsController直接进行任何更改。它链接到上下文(您可以在其中进行更改)和结果集。

于 2012-07-31T23:41:01.097 回答