cellForRowAtIndexPath在核心数据发生任何更改后未调用

时间:2014-05-21 13:40:54

标签: ios uitableview core-data nsfetchedresultscontroller

我正在使用上下文保存数据,而我的FetchedResultsController会监听更改:

- (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath*)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath*)newIndexPath
{
    NSLog(@"CHECK THE COUNT AND INDEXPATH %d , %d ",[self.fetchedResultsController.fetchedObjects count],indexPath.row);
    NSLog(@"New Indexpath %d",newIndexPath.row);
    if (type == NSFetchedResultsChangeInsert) {
        [self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; //UITableViewRowAnimationAutomatic
    } else if (type == NSFetchedResultsChangeMove) {
        [self.tableView moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];
    } else if (type == NSFetchedResultsChangeDelete) {
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (type == NSFetchedResultsChangeUpdate) {
//        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }  else {
        NSAssert(NO,@"");
    }
}

此委托被调用,但在此之后,绑定到fetchedResultsController的TableView没有使用插入的最新记录进行更新。

1 个答案:

答案 0 :(得分:0)

您是否为NSFetchedResultsControllerDelegate实施了所有委托方法?听起来您已在-controllerWillChangeContent:中关闭了更新,但未通过正确实施-controllerDidChangeContent:方法将其重新打开。

如果您已将它们都实施,那么请使用该代码更新您的问题。