我最近一直在使用 UITableView。它被动态填充一次,然后当用户选择一个选项时,我希望列表更改为一个新选项。我正在使用一个包含 3 个部分的分组表,当您单击行时,这三个组需要重新填充不同数量的新行。虽然当新部分中的行数与旧部分中的行数相同时,我的代码可以正常工作,但当该数字发生变化时它会崩溃。有趣的是,它会等待崩溃,直到它尝试绘制以前存在的单元格之一(tableView 仍然认为该部分具有旧的行数,尝试绘制不再在我的模型对象中的单元格,并且所以我认为它崩溃是因为它引用了新数组中不存在的值。
它在这里崩溃:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"MyCell"];
}
if (indexPath.section==2){
//CRASH BELOW
cell.textLabel.text = [NSString stringWithFormat:@"%@", (NSString *)[[[[storyArray objectAtIndex:pageNumber]getChoices] objectAtIndex:(unsigned long)indexPath.row]objectAtIndex:0]] ;
}
return cell;
}
我用来重新加载表的功能在这里:
-(void)changePage:(int)pageChangeNumber{
NSLog(@"The page change! Changing to: %@",[[storyArray objectAtIndex:pageChangeNumber]getTitle]);
pageHeader.text=[[storyArray objectAtIndex:pageChangeNumber] getTitle];
pageBody.text=[[storyArray objectAtIndex:pageChangeNumber] getBody];
[myTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
[myTableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
[myTableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationFade];
[myTableView reloadData];
pageNumber=pageChangeNumber;
NSLog(@"Page Change Done");
}
我还将 numberofRowsInSection 更改为动态...
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSLog(@"Recounting Rows");
if (section==2){
return [[[storyArray objectAtIndex:pageNumber]getChoices] count];
} else {
return 0;
}
}
当每个部分的行数发生变化时,我有什么想法可以让它工作吗?谢谢!