在iOS开发中有时候需要 有滑动Tablecell 点击出现 删除按钮 删除 Tablecell 通常我们会这样操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
//清理本地数据
[self.recentSessions removeObjectAtIndex:indexPath.row];
[_notifiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
在 数据中有多个数据项时 删除是没有问题的,当删除到最后一项时就会出现崩溃现象 崩溃信息为
*** Assertion failure in - [UITableView _endCellAnimationsWithContext:]
这是因为 tableView 是分组的,删除最后一个分组中最后一个cell 和数据源时 也要对 session 进行操作
正确的处理方法为
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
//清理本地数据
[self.recentSessions removeObjectAtIndex:indexPath.row];
[_notifiTableView beginUpdates];
if (self.recentSessions.count == 0)
{
[_notifiTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];
}
[_notifiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[_notifiTableView endUpdates];
}