UITableView细胞删除崩溃?

时间:2012-11-18 21:37:34

标签: ios uitableview cells

所以我有这段代码来删除tableview中的一行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    [self.cellArray removeObjectAtIndex:indexPath.row/2];
    [[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"];
    [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:YES];
}

现在我做indexPath.row / 2,因为我这样做:

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

仅仅是因为它使我的UI看起来像它的样子。无论如何这是崩溃:

  

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有部分中包含的行数(42)必须等于更新前该部分中包含的行数(44),加上或减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数( 0移入,0移出)。'

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSIndexPath *nextPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
    [self.cellArray removeObjectAtIndex:indexPath.row/2];
    [[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"];
    [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:indexPath, nextPath, nil] withRowAnimation:UITableViewRowAnimationFade];
}

2 个答案:

答案 0 :(得分:1)

也许这只是这一行中的一个小错字。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [self.cellArray removeObjectAtIndex:indexPath.row]; // Returning a number instead of possible double
    ...
}

答案 1 :(得分:1)

问题是您在单元格数组中每个对象使用两个表行。但是在您发布的代码中,您只从表中删除了一行。您需要删除两行。

NSIndexPath *nextPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
[tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:indexPath, nextPath, nil] withRowAnimation: UITableViewRowAnimationFade];

BTW - YES不是行动画的有效参数。