NSFetchedResultsController: удаление 1 строки приводит к сбою приложения
Удаление строки из UITableView, передаваемого NSFetchedResultsController, приводит к сбою моего приложения.
Ошибка:
* Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:1330*
Завершение приложения из-за неисследованного исключения »NSInternalInconsistencyException»Причина:Неверное обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (1), должно быть равно количеству строк, содержащихся в этом разделе до обновления (1), плюс или минус число строк, вставленных или удаленных из этого раздела (0 вставлено, 1 удалено) и плюс или минус количество строк, перемещенных в или из этого раздела (0 перемещено, 0 удалено). '
Я хочу только, чтобы удалить. Мой код удаления выглядит так:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView beginUpdates];
SequenceData *sd = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.managedObjectContext deleteObject:sd];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
Мой NSFetchedResultsController настроен так же, как в Ray Wanderlich 'учебник (http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller)
Количество рядов определяется по:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
id sectionObjects = [[self.fetchedResultsController sections] objectAtIndex:section];
NSInteger nbObjects = [sectionObjects numberOfObjects];
return nbObjects;
}
Похоже, что выборка не обновляется (количество строк не меняется). Должен ли я забрать себя (неt заботится контролером выборки)?
Очевидно, здесь есть что-то базовое, чего мне не хватает. Дон»стесняйтесь предлагать основные ответы.
Сначала я реализовал это с помощью контроллера: didChangeObject: ... метод. Ошибка была такой же, но некоторые детали отличались.
редактировать Я считаю, что моя проблема исправлена. Оба ответа (от CX и Martin) помогли мне найти его. Мартин получил ответ из-за объяснений, которые помогли мне немного лучше понять ...