1

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

            });
        });

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

4

1 回答 1

2

将异步数据加载到表中时需要注意的一件事 - 当数据到达时,单元格可能已经滚动到屏幕外,更糟糕的是,可能已被重用于数据数组中的不同条目。

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

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

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

于 2013-01-20T00:24:50.607 回答