根据NSFetchedResultsController
的苹果文档:
您使用获取的结果控制器来有效地管理结果 从Core Data获取请求返回以提供数据 UITableView对象。
根据NSManagedObjectContext
的文件:
其主要职责是管理托管集合 对象。
这两个类的目的似乎重叠了。两者都“管理提取的托管对象”。也许措辞的差异确实意味着什么,但我不明白。在阅读了两个文档后,在我看来,所有数据获取,修改,提交,撤消/重做等都由托管上下文处理。我没有看到nsfrc存在的意义。
当我们已经有托管上下文来处理数据时,有人能解释为什么我们需要获取结果控制器吗?
答案 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
进行任何更改。它链接到上下文(您可以在其中进行更改)和结果集。