0

所以我有这段代码来删除我的表格视图中的一行:

- (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];
}
4

2 回答 2

1

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

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [self.cellArray removeObjectAtIndex:indexPath.row]; // Returning a number instead of possible double
    ...
}
于 2012-11-18T21:40:50.887 回答
1

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

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

顺便说一句 -YES不是行动画的有效参数。

于 2012-11-18T21:45:08.983 回答