我有一个带标准单元格的标准UITableView(意思是没有修改)。每个单元格都需要从不同的Web URL中提取文本:
cell.textLabel.text = [self getTitleFromURL:myURL];
当然,在主线程上调用URL并不是您想要做的。那我该怎么做?我尝试了类似的东西(我从另一个StackOverflow帖子得到的),但这不起作用:
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *title = [self getTitleFromURL:myURL];
dispatch_async( dispatch_get_main_queue(), ^{
cell.textLabel.text = title;
});
});
想法?我可能在这里遗漏了一些非常简单的东西。
答案 0 :(得分:2)
您需要处理异步数据加载到表中的一件事 - 在数据到达时,单元格可能已在屏幕外滚动,更糟糕的是,可能已经重复使用数据数组中的不同条目。
因此,在您返回主线程时,您需要检查信息是否仍然相关,并且不要假设将哪个信息发布到...
if ([[tableView indexPathsForVisibleRows] containsObject:indexPath]) {
UITableViewCell * correctCell = [self.tableView cellForRowAtIndexPath:indexPath];
correctCell.textLabel.text = title;
[correctCell setNeedsLayout];
}
您还可能需要告诉单元格使用setNeedsLayout更新自己。