我已经完成了许多与 NSInternalInconsistencyException / NSFetchedResultsController 相关的问题/答案,但我找不到任何可以帮助我解决问题的东西。
在我的 TVC 中删除一行后出现此错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效
这是负责对数据源执行删除的方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates];
Role *roleToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting: %@", roleToDelete.name);
[self.managedObjectContext deleteObject:roleToDelete];
[self.managedObjectContext save:nil];
// Delete the row from the data source
// [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self performFetch];
[self.tableView endUpdates];
}
}
我的异常断点在此方法的最后一行停止。奇怪的是调试器说我要删除两行,但我不是:
更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数 (2),加上或减去从该节中插入或删除的行数(0 插入, 2 已删除)
下次我启动应用程序时,很明显只删除了一行。
以下是可能导致问题的其他方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchedResultsController sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}