2

我有一个通过静态单元在情节提要中创建的 TableView。

这个想法是一个部分有一个带有标签和开关的单行。当用户点击“打开”开关时,该部分会在下面出现一些新行。有点类似于“设置”应用中的 Wi-Fi 设置(它添加了新部分,但我正在添加新行)。

在此处输入图像描述

我正在通过 Storyboard 创建这个 TableView,如下所示:

在此处输入图像描述

现在,当开关值改变时采取的行动:

- (IBAction)hitSwitch:(id)sender {

    NSArray *indexPathsArray = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:1 inSection:0], [NSIndexPath indexPathForRow:2 inSection:0], nil];



    UISwitch *theSwitch = sender;

    [self.tableView beginUpdates];

    if (theSwitch.on) {

        [self.tableView insertRowsAtIndexPaths:indexPathsArray withRowAnimation:UITableViewRowAnimationAutomatic];

    } else {

        [self.tableView deleteRowsAtIndexPaths:indexPathsArray withRowAnimation:UITableViewRowAnimationAutomatic];

    }

    [self.tableView endUpdates];

}

我希望调用普通的表视图数据源方法来显示这些新行的单元格,所以我添加了以下代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (self.addRowsSwitch.on) {

        return 3;

    } else {

        return [super tableView:tableView numberOfRowsInSection:section];

    }

}



- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (!self.addRowsSwitch.on) {

        return [super tableView:tableView cellForRowAtIndexPath:indexPath];

    } else {

        UITableViewCell *newCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

        return newCell;

    }

}

但是根据我方便的调试器, tableView:numberOfRowsInSection: 被调用,返回一个值,然后应用程序在 tableView:cellForRowAtIndexPath 被调用之前崩溃。

2012-08-02 13:16:08.564 TableViewInsertTest[3186:f803] * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayI objectAtIndex:]:索引 1 超出范围 [0 .. 0]”* ** First throw call stack: (0x14b2022 0xeb2cd6 0x149e644 0x43bea5 0x2481a8 0x1f3688 0x1f4c2a 0x9743e 0xa50b7 0xa50e5 0x2604 0x14b3e99 0x1814e 0x180e6 0xbeade 0xbefa7 0x212c16 0x93b85d 0x1486936 0x14863d7 0x13e9790 0x13e8d84 0x13e8c9b 0x139b7d8 0x139b88a 0x15626 0x1ebd 0x1e25)

我还需要做些什么来完成这项工作,还是不支持我尝试实现的行为类型?

4

0 回答 0