У меня есть UITableView, который показывает список объектов, хранящихся в CoreData. Я могу удалить объект, используя следующий код:Анимация Row Deletion в UITableView с CoreData дает сбой утверждения
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"Delete row");
[managedObjectContext deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];
// Save the context.
NSError *error;
if (![managedObjectContext save:&error]) {
/*do this gracefully one day */
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self refreshTables]; //where refreshTables just reloads the data the table is using and calls [self.tableView reloadData];
}
}
Но у него нет анимации или эстетики.
Когда я пытаюсь оживить, заменив
[self refreshTables];
с
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
Я получаю следующее сообщение об ошибке:
Assertion failure in -[UITableView _endCellAnimationsWithContext:], >/SourceCache/UIKit_Sim/UIKit-1261.5/UITableView.m:920 2010-10-30 16:46:35.717 MyApp[38226:207] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (3) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted).'
Я попытался, имеющих ту deleteRowsAtIndexPaths код множество мест в коде commitEditingStyle без lu ck (например, перед удалением объекта из mOC), но я не могу обойти эту ошибку.
Я знаю, что в примере iPhone от AppleCoreDataRecipes проблема связана с настройкой делегата для FetchedResultsController для обработки/удаления строк, но на данном этапе разработки, если это возможно, я просто хочу простое решение для анимации этих удаленных объектов.
Как я могу оживить удаление строки, до/после удаления объекта из моего управляемого объектаобъекта?
EDIT: Я пробовал иметь deleteRowsAtIndexPaths до и после удаления элемента из mOC с той же ошибкой.
# 2 исправлена проблема. Благодаря! –