我有一个通过Static Cells在Storyboard中创建的TableView。
这个想法是一个部分有一行带有Label和Switch。当用户点击开关“打开”时,该部分会在下面发芽一些新行。与“设置”应用中的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]' ***第一次抛出调用堆栈:(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)
我需要做些什么来使这项工作,或者我试图实施的行为类型不受支持?