原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
欢饮关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言
NSFetchedResultsController提供了CoreData与TableView的纽带。通常使用它查询的结果作为tableview的主列表。它查询的结果是基于indexPath的,也就是说定义好了Section和row。直接使用即可。
同样,使用NSFetchController也能够方便的进行
- 监听ManagedContext中对象的变化,把变化会报给代理
- 可以使用cache来提高效率
基于这两点,一个controller通常有三种使用NSFetchedResultsController的模式
- 不跟踪context-代理为nil
fetched results controller不会进行对象变化的跟踪 - 仅在内存中跟踪context-代理不为nil,cacheName为nil
- 完整的跟踪context-代理不是nil,有cacheName
Demo
注:本文不会详细讲述demo的代码,因为写了这么多发现大篇幅的讲解如何实现一个工程的博客,结果貌似没什么人看。
一个很简单的小软件,能够对公司部门进行管理,点开每个部门能看到对应员工的信息。
下载链接
http://download.csdn.net/detail/hello_hwc/8723837
对象图
- Department表示部门,具有属性名称和楼层
- Employee表示员工,具有属性名称,年龄和工号。
- 一个Employee隶属与一个部门,一个部门可以包括多个员工。
如何使用NSFetchedResultsController
创建
Demo中使用的代码
-(NSFetchedResultsController *)fetchedResultsController{
if (!_fetchedResultsController) {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:[Department entityName] inManagedObjectContext:[self managedcontext]];
[fetchRequest setEntity:entity];
// Specify how the fetched objects should be sorted
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES];
NSSortDescriptor * sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"floor"