NSFetchedResultsController是一个联系CoreData和TableView类,方便地将数据显示到table中,不需要自己去将CoreData中的数据做分区,然后显示。
- (NSFetchedResultsController *)fetchedResultsController
{
if (nil != _fetchedResultsController) {
return _fetchedResultsController;
}
NSManagedObjectContext *context = [self.contactsData managedObjectContext]; //获取NSManagedObjectContext
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; //初始化一个NSFetchRequest
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error;
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name"ascending:YES]; //设置用来排序的key
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"shengxiao == %@", self.team]; //设置从CoreData中取数据的过滤器,即一个谓词,很强大的东西
// [fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:20];
NSString *sectionNameKey = [self.contactsData GetSectionNameKey];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:sectionNameKey cacheName:@"ContactsCache"]; //设置按哪个key来进行分区,如果设置为nil的话,就是不分区
_fetchedResultsController.delegate = self;
if (![_fetchedResultsController performFetch:&error]) { //最后就是执行fetch,即将上面所有的设置生效
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
}
很方便的类,给我省了很多事情。之前不知道有这个类,就自己手动去从CoreData取了数据,然后分区,再显示到tableView,太麻烦。苹果于是做了这么一个类帮我们省了很多事。