3

NSFetchedResultsController苹果文档:核心数据 - 的NSManagedObjectContext VS NSFetchedResultsController

您使用已取得的成果控制器能够有效地管理 从核心数据返回的结果读取请求提供一个 UITableView的对象数据。

NSManagedObjectContext文档:

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

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

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

回答

3

NSManagedObjectContext是核心数据的一个基本概念,那种analagous到一个事务中的关系数据。您不仅可以抓取对象,你可以创建,更新和删除它们,将它们保存回持久性存储等

你不需要NSFetchedResultsController。它是一个实用程序类,用于以易于在表格视图中使用的格式提供Core Data对象。在NSFetchedResultsController中使用的提取对象将由NSManagedObjectContext进行管理。

话虽如此,“效用阶层”严重低估了它。它会自动管理诸如更新,插入和删除底层数据源,缓存,部分等内容,这些是手动处理的难点。

+0

因此,MOC使用提取请求A从持久性存储中获取一些数据。然后,FRC使用提取请求B从该MOC获取数据以提供表格视图控制器。 A和B是两个不同的获取请求。那是对的吗? – Philip007 2012-08-01 22:44:36

1

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

+0

你能指定每个“它”究竟是指什么?我不明白你的意思。 – Philip007 2012-08-01 10:17:58

+0

it = NSFetchedResultsController – borrrden 2012-08-01 10:53:05

4

A NSFetchedResultsController提及NSManagedObjectContext

FRC有责任按照您提供的标准从其MOC中提取和排序所有对象。

FRC是一个工具类,用于处理来自给定MOC的对象。

e.g All People with firstName is 'John', sorted by lastName

如果你添加一个新的人与firstName = 'John'由FRC引用的MOC,获取的成果控制器将解决它,并发出一个代表回调。

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

NSManagedObjectContext是一堆东西。 NSFetchedResultsController是从该桶中挑选特定事物的一种方式。

相关问题