我有一个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;
}