使用核心数据删除包含animation的表格行

如果我使用标准animation(如UITableViewRowAnimationFade从表中删除一行,则代码将崩溃,并显示以下错误:

***终止应用程序,由于未捕获exception“NSInternalInconsistencyException”,原因:“无效更新:在第1部分中的行数无效。更新(4)后,现有节中包含的行数必须等于行数在更新之前包含在该部分(4)中,加上或减去从该部分插入或删除的行数(0插入,1删除)。

如果我删除animation行的行删除/删除作品,但我不再有酷苹果删除过渡。

这是我的代码 – 任何帮助表示赞赏。 这种删除行的方法在iOS4之前工作,不知道是否有什么改变?

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { // If row is deleted, remove it from the list. if (editingStyle == UITableViewCellEditingStyleDelete) { NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; MyItem *myItem = [self.getItemsFetchedResultsController objectAtIndexPath:path]; [dataRepository deleteItem:myItem]; // If I comment this line out the delete works but I no longer have the animation [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; [self.tableView reloadData]; } } 

数据存储库

 -(void)deleteItem:(MyItem *)myItem { [self.managedObjectContext deleteObject:myItem]; [self saveCurrentContext]; } 

我通过在表更新之前和之后使用此代码解决了此问题:

 [tableView beginUpdates]; if (editingStyle == UITableViewCellEditingStyleDelete) { ... } [tableView endUpdates]; 

一个原因可能是如果你已经设置了NSFetchedResultsControllerDelegate并且实现了controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:当你保存上下文并以你的名字更新表视图的时候,它会被调用。 你可能有这样的代码:

 case NSFetchedResultsChangeDelete: [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; break; 

通常,当你得到这个错误时,意味着你没有按照你用deleteRowsAtIndexPaths:withRowAnimation:指定的方式更新数据源deleteRowsAtIndexPaths:withRowAnimation: 当你调用这个方法时,你保证你已经更新了数据源来反映这个变化。