0

在我的表格视图类中使用以下方法,我正在尝试删除表格视图的一行

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [arrUserData count];
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:YES];   
}

- (void)tableView:(UITableView *)tv commitEditingStyle (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if(editingStyle == UITableViewCellEditingStyleDelete) 
    {
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [arrUserData removeObjectAtIndex:indexPath.row];
    }
}

我在表中有大约 40 行,当我单击任何行上的红色删除按钮时,它在这一行崩溃

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

带有以下崩溃日志

2012-05-30 14:58:45.835 testDeleteRow[3276:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (41) must be equal to the number of rows contained in that section before the update (41), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted).'

谁能告诉我如何解决这个问题,谢谢提前

4

2 回答 2

1

实际上,您需要在删除时更新数据源cells。如果您使用的是array用于填充,table那么在此行之后 -

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

您需要同时从中删除index对象array。中的行数也section应该减少 1。如果你在那里返回array计数,那么它将被自动处理。

于 2012-05-30T10:07:26.963 回答
0

当您从 tableview 中删除行时,您的数据源不会更新。假设您的表在删除前包含 10 行,那么删除后它将仅包含 9 行,而您的数据源仍然包含 10 个值。所以您必须删除已删除的明确地来自数据源的值。

于 2012-05-30T10:17:17.227 回答