您的位置:首页 > Web前端

ios NSFetchedResultsController的使用

2016-08-25 22:02 423 查看
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,太麻烦。苹果于是做了这么一个类帮我们省了很多事。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios