0

我最近一直在使用 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;
}

}

当每个部分的行数发生变化时,我有什么想法可以让它工作吗?谢谢!

4

2 回答 2

1

在更新表格视图的数据并调用 reloadSections 之前,您需要先调用[myTableView beginUpdates],一旦完成[myTableView endUpdates]

于 2013-02-05T14:12:04.297 回答
1

我不知道您遇到了什么崩溃,但是如果numberOfSectionsInTableView:ortableView:numberOfRowsInSection:方法在表自身重组时返回不同数量的行,我会遇到崩溃。

例如,UITableView 在重绘时(包括动画期间)多次调用这些方法。在我的后端,一些值在动画期间发生了变化。

在更改 UITableView 之前,我必须特别注意同步这些值

于 2012-09-07T22:22:21.270 回答