在呈现表时,UITableView和更改数据源

时间:2014-09-03 09:02:08

标签: ios uitableview nsarray

我有一个UITableView的视图控制器。表视图的数据源是从网络异步加载的NSArray

第一次加载数据时,一切都很好,但由于该数据也不时刷新,我注意到当UITableView仍在渲染单元格时调用{{{{{{ 1}}通过刚刚完成获取新数据的异步操作将NSArray设置为不同的值。

我相信cellForRowAtIndexPath已经返回了旧NSArray的长度,而UITableView正在根据该值渲染单元格。但同时我的NSArray已被重新加载,并且它的对象更少,因此numberOfRowsInSection实际上是在尝试索引超出数组范围的值。

有没有办法中断单元格的渲染,或者更好的是,知道UITableView何时完成渲染其单元格,以便我可以更新数据源?

还有其他方法可以解决这类问题吗?

更新:我添加了示例代码

代表们:

cellForRowAtIndexPath

执行异步提取的代码非常类似:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [_rootCategories count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell;
    NSString *CellIdentifier = @"RootCell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[ALTRootCategoryCell alloc] init];
    }
    ALTRootCategoryCell *rcc = (ALTRootCategoryCell *)cell;
    ALTRootCategory *rc = [_rootCategories objectAtIndex:indexPath.row];
    NSString *s = [NSString stringWithFormat:@"%@ (%d punti)", rc.title, [rc.valueMax intValue]];
    rcc.title.text = s;
    return cell;
}

1 个答案:

答案 0 :(得分:0)

更改DataSource后,您应该调用reloadData方法更新表:

[self.tableView reloadData];