MagicalRecords从fetchedResultsController获取数据

时间:2013-11-07 08:19:13

标签: core-data magicalrecord nsfetchedresultscontroller

我已将此fetchedResultsController添加到我的UIViewController。我正在使用MagicalRecords。

这是我的代码:

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

    _fetchedResultsController = [Artist fetchAllGroupedBy:nil withPredicate:nil sortedBy:@"artist_id" ascending:NO delegate:self];

    return _fetchedResultsController;
}

但是这段代码没有调用。

我的UITableView中有UIViewController。我想下面这个方法应该启动上面的方法,但它没有:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id  sectionInfo =
    [[_fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

所以目标是使用魔法记录和fetchedResultsController获取数据。

我当然可以制作类似-findAll的内容,但我认为fetchedResultsController将自动更新数据而不是-findAll

1 个答案:

答案 0 :(得分:1)

你必须声明一个属性(如果你还没有):

@property(strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
在视图控制器中

然后通过属性访问器而不是实例变量访问它,例如

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

self.fetchedResultsController调用getter方法fetchedResultsController,以便在第一次调用时创建FRC。

您还应该设置

_fetchedResultsController.delegate = self;

在getter方法中启用自动更改跟踪,并调用

[_fetchedResultsController performFetch:&error];

用于初始提取(除非MagicalRecord为您执行此操作)。