ios NSFetchedResultsController的使用

来源:互联网 发布:编程金字塔图案 编辑:程序博客网 时间:2024/05/22 02:48

NSFetchedResultsController是一个联系CoreData和TableView类,方便地将数据显示到table中,不需要自己去将CoreData中的数据做分区,然后显示。


- (NSFetchedResultsController *)fetchedResultsController

{

    if (nil !=_fetchedResultsController) {

        return_fetchedResultsController;

    }

    

    NSManagedObjectContext *context = [self.contactsDatamanagedObjectContext];    //获取NSManagedObjectContext

    NSFetchRequest *fetchRequest = [[NSFetchRequestalloc] init];    //初始化一个NSFetchRequest

    NSEntityDescription *entity = [NSEntityDescriptionentityForName:@"Contacts"inManagedObjectContext:context];

    [fetchRequest setEntity:entity];

    NSError *error;

    

    NSSortDescriptor *sortDescriptor = [NSSortDescriptorsortDescriptorWithKey:@"name"ascending:YES];    //设置用来排序的key

    [fetchRequest setSortDescriptors:[NSArrayarrayWithObject:sortDescriptor]];

    

    //    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"shengxiao == %@", self.team];      //设置从CoreData中取数据的过滤器,即一个谓词,很强大的东西

    //    [fetchRequest setPredicate:predicate];

    [fetchRequest setFetchBatchSize:20];

    

    NSString *sectionNameKey = [self.contactsDataGetSectionNameKey];

    _fetchedResultsController = [[NSFetchedResultsControlleralloc] initWithFetchRequest:fetchRequestmanagedObjectContext:context sectionNameKeyPath:sectionNameKey cacheName:@"ContactsCache"];     //设置按哪个key来进行分区,如果设置为nil的话,就是不分区

    _fetchedResultsController.delegate =self;

    

    if (![_fetchedResultsControllerperformFetch:&error]) {//最后就是执行fetch,即将上面所有的设置生效

        NSLog(@"Unresolved error %@, %@", error, [erroruserInfo]);

        abort();

    }

    return_fetchedResultsController;

}


很方便的类,给我省了很多事情。之前不知道有这个类,就自己手动去从CoreData取了数据,然后分区,再显示到tableView,太麻烦。苹果于是做了这么一个类帮我们省了很多事。

1 0
原创粉丝点击