我正在使用Matt Gallagher的GenericTableViewController
想法控制我的UITableViews
。我的数据源是NSFetchedResultsController
。
http://cocoawithlove.com/2008/12/heterogeneous-cells-in.html
一切正常,直到我尝试删除单元格。
我的View Controller中有以下代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the managed object.
NSManagedObjectContext *context = [wineryController managedObjectContext];
[context deleteObject:[wineryController objectAtIndexPath:indexPath]];
NSError *error;
if (![context save:&error]) {
// Handle the error.
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
最后一行崩溃,控制台中的解释很冗长:
***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,
原因:“无效的更新:第0部分中的行数无效。行数
更新(5)之后包含在现有节中的数字必须等于
更新(5)之前该部分中包含的行数,加上或减去数字
从该部分插入或删除的行数(插入0,删除1)。
好的,我知道这是在说什么……行不会被删除(我会假设),因为我没有将某些消息转发到正确的位置(因为我已经从“正常”位置移走了一些代码)。有谁知道哪个?我对此完全感到困惑。
最佳答案
好吧,ba我只是找到this答案,这是不一样的,但是却使我朝着正确的方向前进。我将在这里留给以后遇到类似麻烦的任何人。
关键是用begin和end标签包装deleteRowsAtIndexPaths,并强制模型在同一块内更新,结果是:
[tableView beginUpdates];
[self constructTableGroups];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
这使问题消失了,动画效果也很好。
关于iphone - 如何使deleteRowsAtIndexPaths:与通用TableViewController一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1016200/