插入行时iOS索引2超出边界错误

时间:2013-07-28 16:03:42

标签: ios uitableview insert tableview

我有一个静态的UITableView并通过storyboard配置。我试图在didSelectRowAtIndexPath期间使用insertRowsAtIndexPaths:withRowAnimation插入一些行:我收到错误:

  

*由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [__ NSArrayI objectAtIndex:]:索引2超出边界[0 ..   1]”。

我已经实现了numberOfRowsInSection,但每次都会遇到此错误。是否与静态不动态的表有关?感谢。

if (indexPath.section == 1) {
    if (indexPath.row == 1) { // Map Type Cell

        self.isSelectingMapType = YES;

        NSArray *indexPaths = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:2 inSection:1], [NSIndexPath indexPathForRow:3 inSection:1], [NSIndexPath indexPathForRow:4 inSection:1], [NSIndexPath indexPathForRow:5 inSection:1], nil];
        [self.tableView beginUpdates];
        [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
        //[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 1) {
        if (self.isSelectingMapType == YES) {
            return 6;
        }
        return 2;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您可能希望快速查看有关表视图在更新块中的行为的Apple's Table View Programming Guide

  

动画块中的删除和重新加载操作指定应删除或重​​新加载原始表中的哪些行和部分; insertions指定应将哪些行和部分添加到结果表中。用于标识节和行的索引路径遵循此模型。

您无法使用这些索引路径,因为它们尚未出现在表中。 由于您检查isSelectingMapType中的-tableView:numberOfRowsInSection:,您应该可以简单地要求表格视图重新加载以获得所需的结果。

答案 1 :(得分:0)

我为所有应用程序使用storyboard但从未尝试使用静态单元格将行插入UITableView。我所做的是创建故事板中所需的所有行,并以编程方式隐藏/显示它们而不是插入它们。

首先,在故事板中创建所需的所有单元格。然后,按如下方式修改代码:

if (indexPath.section == 1) 
{
    if (indexPath.row == 1) 
    { 
        self.isSelectingMapType = YES;
        [self.tableView reloadData];
    }
}