如何在UITableView上延迟加载文本?

时间:2013-01-20 00:09:14

标签: iphone ios xcode cocoa-touch uitableview

我有一个带标准单元格的标准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;

            });
        });

想法?我可能在这里遗漏了一些非常简单的东西。

1 个答案:

答案 0 :(得分:2)

您需要处理异步数据加载到表中的一件事 - 在数据到达时,单元格可能已在屏幕外滚动,更糟糕的是,可能已经重复使用数据数组中的不同条目。

因此,在您返回主线程时,您需要检查信息是否仍然相关,并且不要假设将哪个信息发布到...

if ([[tableView indexPathsForVisibleRows] containsObject:indexPath]) {
      UITableViewCell * correctCell = [self.tableView cellForRowAtIndexPath:indexPath];
                correctCell.textLabel.text = title;
                [correctCell setNeedsLayout];
             }

您还可能需要告诉单元格使用setNeedsLayout更新自己。