0

我有一个静态的 UITableView 并通过情节提要进行配置。我正在尝试使用 insertRowsAtIndexPaths:withRowAnimation: 在 didSelectRowAtIndexPath 期间插入一些行,但出现错误:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [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;
}
4

2 回答 2

0

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

首先,在情节提要中创建您想要的所有单元格。然后,修改代码如下:

if (indexPath.section == 1) 
{
    if (indexPath.row == 1) 
    { 
        self.isSelectingMapType = YES;
        [self.tableView reloadData];
    }
}
于 2013-07-28T16:29:21.873 回答
0

您可能想快速浏览一下Apple 的 Table View Programming Guide,了解表视图在更新块中的行为方式。

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

您不能使用这些索引路径,因为它们尚未出现在表中。由于您签isSelectingMapType入,-tableView:numberOfRowsInSection:您应该能够简单地要求表视图重新加载以达到您想要的结果。

于 2013-07-28T16:16:24.763 回答