使用NSFetchedResultsController删除节的最后一行的错误消息

时间:2013-09-05 15:18:11

标签: ios uitableview core-data nsfetchedresultscontroller

我有UITableView使用NSFetchedResultsController作为数据源。我使用其中一个字段作为我的部分。我启用了行删除(使用滑动手势)。工作得很好。

当我删除部分的最后一行时,问题出现了。它不会崩溃,但控制台显示以下消息:

  

CoreData:错误:严重的应用程序错误。抓住了一个例外   在调用期间来自NSFetchedResultsController的委托   -controllerDidChangeContent :.无效更新:第0部分中的行数无效。现有部分中包含的行数   更新后(1)必须等于包含的行数   更新前的那一节(1),加上或减去行数   插入或删除该部分(0插入,1删除)和加号   或减去移入或移出该部分的行数(0移动   in,0搬出去了)。 with userInfo(null)

这都是非常基本的东西:

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

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath {
    UITableView *tableView = self.tableView;

    switch(type) {
        …
        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                             withRowAnimation:UITableViewRowAnimationFade];

            break;

        case NSFetchedResultsChangeUpdate:
            [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath]
                    atIndexPath:indexPath];
            break;
        …
    }
}

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

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source            
        FHClass *foo = [[self fetchedResultsController] objectAtIndexPath:indexPath];;
        [[self managedObjectContext] deleteObject:meal];
        [self saveContext];
    }  
}

如果我检查-numberOfRowsInSection:我发现删除行时数字会逐渐减少。甚至到了0

我错过了什么?任何提示?我这个愚蠢的错误? ; - )

1 个答案:

答案 0 :(得分:2)

您应该实施controller:didChangeSection:atIndex:forChangeType:来处理部分更改,然后将表格视图请求deleteSections: