ANDYFetchedResultsTableDataSource 1.2

ANDYFetchedResultsTableDataSource 1.2

测试已测试
Lang语言 Obj-CObjective C
许可协议 MIT
发布上次发布2015年2月

Elvis Nuñez维护。



将一个NSManagedObject插入CoreData并在您的UITableView中以动画方式显示,需要多少代码?(当然使用NSFetchedResultsController)

100行代码?200行代码?300行代码?

哦,ANDYFetchedResultsTableDataSource可以在71行代码内完成这个操作。

#pragma mark - Lazy Instantiation

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController) {
        return _fetchedResultsController;
    }

    NSManagedObjectContext *context = [[ANDYDataManager sharedManager] mainContext];
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Task"];
    fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                    managedObjectContext:context
                                                                      sectionNameKeyPath:nil 
                                                                               cacheName:nil];
    return _fetchedResultsController;
}

- (ANDYFetchedResultsTableDataSource *)dataSource
{
    if (_dataSource) {
        return _dataSource;
    }

    _dataSource = [[ANDYFetchedResultsTableDataSource alloc] initWithTableView:self.tableView 
                                                      fetchedResultsController:self.fetchedResultsController
                                                                cellIdentifier:ANDYCellIdentifier];

    _dataSource.configureCellBlock = ^(UITableViewCell *cell, Task *task, NSIndexPath *indexPath) {
        cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@ (%@)", task.title, task.date, indexPath];
    };

    return _dataSource;
}

#pragma mark - View Lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ANDYCellIdentifier];
    self.tableView.dataSource = self.dataSource;

    UIBarButtonItem *addTaskButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                                                                                   target:self
                                                                                   action:@selector(createTask)];
    self.navigationItem.rightBarButtonItem = addTaskButton;
}

#pragma mark - Actions

- (void)createTask
{
    [ANDYDataManager performInBackgroundContext:^(NSManagedObjectContext *context) {
        Task *task = [Task insertInManagedObjectContext:context];
        task.title = @"Hello!";
        task.date = [NSDate date];
        [context save:nil];
    }];
}

归属

基于objc.io上的优秀团队的工作。

做伟大

如果有什么看起来很愚蠢,请创建一个友好且建设性的问题,您的反馈将会是伟大的。祝您有美好的一天。

作者

Elvis Nuñez, [email protected]

许可

ANDYFetchedResultsTableDataSource在MIT许可下可用。有关更多信息,请参阅LICENSE文件。