我试图在显示进度HUD(本例中为MBProgressHUD)时删除UITableViewCell
。这是必要的,因为被删除的核心数据实体相对较大。当我运行这段代码,我得到了以下错误消息:在删除UITableViewCell时显示进度HUD
终止应用程序由于未捕获的异常“NSInternalInconsistencyException”,理由是:“无效的更新:行数量无效在部分0包含在现有的行数(2)之后的部分必须等于更新前(2)的该部分中包含的行数,加上或减去从该部分插入或删除的行数(插入0,删除1)以及加或减移入或移出该部分的行数(移入0,移出0)。'
正在执行的代码是:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates];
[SVProgressHUD showWithStatus:@"Deleting..." maskType:SVProgressHUDMaskTypeGradient];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
Garden *gardenToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting garden '%@'", gardenToDelete.gardenName);
[self.managedObjectContext deleteObject:gardenToDelete];
[self.managedObjectContext save:nil];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Dismissing progress HUD");
NSLog(@"delete animation");
NSLog(@"deleting row");
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
NSLog(@"performFetch");
[self performFetch];
[SVProgressHUD dismiss];
});
});
[self.tableView endUpdates];
}
}
当它运行时,我看到的HUD出现,则该应用进行到挂起。我相信这与我的多任务结构有关。
但是,如果'managedObjectContext'是一个实例变量(在这种情况下)它会适用? – Andrew
是的。每个线程都必须有自己的NSManagedObjectContext实例。 – Jeepston