删除后UITableView中的行数需要不同

时间:2014-08-01 02:35:18

标签: objective-c uitableview ios7

我有一个包含多个部分的表格。当给定的部分没有行时,我从numerOfRowInSection返回1,然后创建一些默认文本。我不允许选择或编辑此行。

问题是这个部分确实允许在有数据的情况下删除行(再次我在没有数据时禁用它,我显示的是默认文本)。但是,假设本节中有一行实际数据。当用户删除此行时,它应该重新加载表并显示我的默认文本,因为此部分不再存在数据。实际发生的是应用程序终止错误,因为在删除之后它期望0行(先前1行,1行删除,0行结果)。在我的代码中虽然当行为0时我返回1如上所述,因此数学不起作用并且错误关闭了所有内容。

问题:当表为空时如何保留默认行但允许删除,以便在删除最后一行数据时,它将允许我的1个默认文本而不是预期的行?

删除代码:

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

处理行数的代码和默认值:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 0) return [self.channelIDArray count];
    else if (section == 1)
        if ([self.favChannelIDArray count]>0) return [self.favChannelIDArray count];
        else return 1;
}

错误:

2014-07-31 19:47:19.194 ephIM [3183:60b] * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:第1部分中的无效行数更新后的现有部分中包含的行数(1)必须等于更新前的该部分中包含的行数(1),加上或减去从该部分插入或删除的行数(0)插入,1删除)并加上或减去移入或移出该部分的行数(0移入,0移出)。'

1 个答案:

答案 0 :(得分:1)

当没有正常行时,您的代码没有考虑额外的行。您需要添加:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self deleteFav:indexPath.row];
        [tableView beginUpdates];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
        if (indexPath.section == 1 && self.favChannelIDArray.count == 0) {
            // This tells the table to insert the "dummy" row you want
            [tableView insertRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:0 inSection:indexPath.section] ] withRowAnimation:UITableViewRowAnimationFade];
        }
        [tableView endUpdates];
    }
}