我在运行时填充了一个tableview。我为它设置了一个编辑选项,我可以从中删除部分。部分数取决于数组,部分中只有一行。
问题:
当我点击删除按钮时,我在日志中收到一个例外情况:
断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-1448.89 / UITableView.m:974
commitEditingStyle:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
NSString *strCusID = [objCustomer customerID];
CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
[objCustomerModel deleteCustomer:strCusID];
[tableView beginUpdates];
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
[tableView reloadData];
}
}
答案 0 :(得分:2)
您可以尝试将beginUpdates
电话放在开头,
if (editingStyle == UITableViewCellEditingStyleDelete) {
[tableView beginUpdates];
Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
NSString *strCusID = [objCustomer customerID];
CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
[objCustomerModel deleteCustomer:strCusID];
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
[tableView reloadData];
}
因为插入/删除/更新操作必须放在beginUpdates
和endUpdates
之间。
这是Apple doc:
如果您未在内部进行插入,删除和选择调用 此块,行计数等表属性可能无效。
此外,如果相关部分是最后一部分,请确保您仍然返回1作为部分数量。在这种情况下,仍然为部分数返回1并返回0作为行数。
答案 1 :(得分:0)
幸运的是我找到了解决问题的方法。以下是我用来摆脱问题的代码:
Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
NSString *strCusID = [objCustomer customerID];
CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
[objCustomerModel deleteCustomer:strCusID];
[arrCustomerList removeObject:objCustomer];
[tableView reloadData];