当tableview结束显示单元格时如何更改为读取状态?

时间:2013-12-13 17:56:43

标签: ios iphone core-data nsfetchedresultscontroller

我尝试创建一个聚合Feed的应用程序。

我希望在表格视图结束显示单元格时更改Feed状态。

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    Feed* feed = [_fetchedResultsController objectAtIndexPath:indexPath];
    if ([feed.read boolValue] == YES) return ;
    feed.read = [NSNumber numberWithBool:YES];
    [Feed save];
}

我使用NSFetchedResultsController,当我更改feed状态时,我使用reloadRowsAtIndexPath。

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView beginUpdates];
}

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
    {
        switch(type) {
            ...
            case NSFetchedResultsChangeUpdate:
                [self.tableView reloadRowsAtIndexPaths:@[indexPath]
                                      withRowAnimation:UITableViewRowAnimationAutomatic];
                break;
            ...
        }
    }

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView endUpdates];
}

我滚动,使用好didEndDisplayingCell调用indexPath,当tableView结束更新时,它会再次使用下一个didEndDisplayingCell调用indexPath。之后,核心数据出现严重错误。

CoreData: error: Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  *** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2] with userInfo (null)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为什么要更新coreData中的didEndDisplayingCell? 通过致电[Feed save],您的tableview将再次开始更新。tableView会调用didEndDisplayingCell,因为您重新加载了刚更新的那一行。

所以将代码放在didEndDisplayingCell方法的其他地方。