1

標準セルを備えた標準UITableViewがあります(変更なしを意味します)。各セルは、異なるWebURLからテキストを取得する必要があります。

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

テーブルへの非同期データロードで注意する必要があることの1つは、データが到着するまでに、セルが画面外にスクロールし、さらに悪いことに、データ配列の別のエントリに再利用されている可能性があることです。

したがって、メインスレッドに戻るときは、情報がまだ関連しているかどうかを確認する必要があり、どのセルに投稿するかについては何も想定していません...

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

また、setNeedsLayoutで自分自身を更新するようにセルに指示する必要がある場合もあります。

于 2013-01-20T00:24:50.607 に答える