При удалении swype (большинство импортируемых строк этого метода):
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
Table *deleteRow = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.managedObjectContext deleteObject:deleteRow];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
При удалении строки я получаю эту ошибку:
Завершение приложения из-за неотображенного исключения "NSInternalInconsistencyException", причина: "Неверное обновление: неверное количество строк в разделе 2.
Количество строк, содержащихся в существующем разделе после обновления (1), должно быть равно количеству строк, содержащихся в этом разделе, перед обновлением (1) плюс или минус количество строк, вставленных или удаленных из этого раздела (вставлено 0, 1 удалено) и плюс или минус количество строк, перемещенных в или из этой секции (0 перемещено в, 0 выведено).
Если я прокомментирую последнюю строку кода ([tableView deleteRowsAtIndexPaths:...]
), все работает нормально (но мне нужно обновить представление, чтобы увидеть, что эта строка была удалена).
Как это сделать правильно..?
EDIT: Учитывая @Kyr Dunenkoff responce, я добавил:
- (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath*)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath*)newIndexPath
{
UITableView *tableV = [self tableView];
switch(type) {
case NSFetchedResultsChangeDelete:
[tableV deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController*)controller
{
[[self tableView] endUpdates];
}
- (void)controllerWillChangeContent:(NSFetchedResultsController*)controller
{
[[self tableView] beginUpdates];
}
Однако это не изменило ошибку и ошибку. Atm это просто вызвало то, что добавление новых строк больше не работает.