tableView:commitEditingStyle:forRowAtIndexPath:导致断言失败

时间:2012-07-02 05:04:30

标签: iphone ios uitableview

我有一个显示对象NSMutableArray的tableView,我目前正在尝试实现tableView:commitEditingStyle:forRowAtIndexPath:方法。如果我注释掉[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];行,那么在更新UI之外一切正常。

这是我对该方法的实现:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.modelClass removeObjectAtRow:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}

这是我得到的错误:

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2280.1/UITableView.m:1060

其他问题有答案表明我需要将@[indexPath]替换为[NSArray arrayWithObject:indexPath],而这只会出现同样的错误。

2 个答案:

答案 0 :(得分:3)

问题可能在方法numberOfRowsInSection中,所以,为了避免麻烦你应该:

在函数commitEditingStyle中删除数组,数据库等中的数据。 减少当前行数。

[tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

你的问题将得到解决!!!

答案 1 :(得分:2)

这是因为UITableView在删除行后再次输入数据源方法numberOfRowsInSection。确保它返回self.modelClass.countnumberOfRowsInSection的正确行数。