【发布时间】:2013-07-16 07:13:26
【问题描述】:
我已经处理了许多与 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];
}
【问题讨论】:
-
我认为 self.fetchedResultsController 是您的本地数组,您不会从中删除数据。您已将其从 self.fetchedResultsController 中删除。
-
@fibnochi:
self.fetchedResultsController是NSFetchedResultsController而不是数组。
标签: iphone ios objective-c core-data