#ios #uitableview
#iOS #uitableview
Вопрос:
Я получаю приведенную ниже ошибку из следующего кода, пожалуйста, не могли бы вы сказать мне, в чем моя проблема.
*** Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (2), должно быть равно количеству строк, содержащихся в этом разделе до обновления (2), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 1 удалено).’
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
id object = [[[self cdArray] objectAtIndex:indexPath.row] retain];
[[self cdArray] removeObject:object];
[[self managedObjectContext] deleteObject:object];
[self refreshArray];
NSError *error = nil;
if (![[self managedObjectContext] save:amp;error]) {
NSLog(@"n%sn%@", __PRETTY_FUNCTION__, [error description]);
}
[[self tableView] deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
}
}
- (void) refreshArray {
if ([self cdArray] == nil) {
[self setCdArray:[[NSMutableArray alloc] init]];
}
[cdArray removeAllObjects];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSError *error = nil;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Image"
inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:amp;error];
for (CDImage *image in fetchedObjects) {
[cdArray addObject:image];
}
[[self tableView] reloadData];
[fetchRequest release];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
Ответ №1:
Вы не должны вызывать
[self refreshArray];
до тех пор, пока вы не зафиксируете свое удаление здесь,
NSError *error = nil;
if (![[self managedObjectContext] save:amp;error]) {
NSLog(@"n%sn%@", __PRETTY_FUNCTION__, [error description]);
}
Вы должны переключить строки.
Комментарии:
1. Похоже, что удаления не происходит. Можете ли вы проверить количество объектов, возвращаемых во время выборки в
refreshArray
?