核心数据 - NSManagedObjectContext vs NSFetchedResultsController

时间:2012-07-31 23:37:32

标签: ios core-data nsfetchedresultscontroller nsmanagedobjectcontext

根据NSFetchedResultsController的苹果文档:

  

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

根据NSManagedObjectContext的文件:

  

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

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

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

3 个答案:

答案 0 :(得分:4)

NSFetchedResultsController引用了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是从该桶中挑选特定内容的一种方式。

答案 1 :(得分:3)

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

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

话虽如此,"实用课程"严重低估了它。它会自动管理基础数据源中的更新,插入和删除,缓存,部分等操作,这些操作很难手动处理。

答案 2 :(得分:1)

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