我試圖在顯示進度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