我在一个应用程序中有几个UITableViews,并且滑动到删除工作正常。问题是,当我尝试滑动一个空单元格(在底部)时,应用程序只会崩溃:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-1914.84/UITableView.m:833
2012-03-24 16:20:03.158 [22339:707] Exception - attempt to delete row 3 from section 0 which only contains 3 rows before the update - attempt to delete row 3 from section 0 which only contains 3 rows before the update
在崩溃之前都没有调用cellForRowAtIndexPath, commitEditingStyle
和editingStyleForRowAtIndexPath
,就像崩溃发生在我的任何方法都被调用之前。
作为参考,我在editingStyleForRowAtIndexPath
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
if ((indexPath.row == self.insertIndex && indexPath.section == [self.sections count] -1) || (indexPath.row == 0 && [sections count]==0)) { // last row of section, or only row of only section
return UITableViewCellEditingStyleInsert;
} else {
return UITableViewCellEditingStyleDelete;
}
}
更新:这实际上是一个很大的问题,因为当桌面滚动时应用程序实际上无法使用。
答案 0 :(得分:11)
看起来这样做的根本原因是在刷新时尝试重新加载表视图中的行。必定会出现某种不一致的状态,每次都会导致应用程序崩溃。
答案 1 :(得分:0)
解决方案:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
// tableView.isEditing ? NSLog(@"show edit controls"):NSLog(@"don't show edit controls");
if(tableView.isEditing){
return NO;
}else{
return YES;
}
}