0

OK、ここで基本的な何かが欠けていることを願っています-私はこれについてあまり専門的ではありません。コード例がなくても一目瞭然です。tableView に表示されるタイトルのリストと、セルが選択されたときに webView に渡される関連 URL で構成される、Web でホストされている xml ファイルを解析します。解析は tableView で辞書に行われます。メイン スレッドで解析すると問題なく動作しますが、信号が弱い場合に UI がハングするのが心配です。したがって、ここの例のように解析呼び出しをディスパッチ キューにラップすると、空のテーブルが表示されます。しかし、ビュー階層に戻って再試行すると (ナビゲーション コントローラーに埋め込まれています)、テーブルが完全に読み込まれます。何らかの方法でセカンダリ スレッドを使用することで、コンテンツ配列にデータが入力される前にテーブルが作成されると想定しています。どうすればこれを回避できますか?ありがとう!アンドリュー

4

2 に答える 2

1

- (void)parserDidEndDocument:(NSXMLParser *)parserのデリゲート メソッドを実装しNSXMLParserます。reloadDataそして、そのメソッドから tableView を呼び出します。

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
   dispatch_sync(dispatch_get_main_queue(), ^{
       [yourTable reloadData];
   });
}

NSXMLParserDelegateを参照してください

于 2012-12-26T09:15:10.320 に答える
0

ディスパッチ キューをパレスする場合は、メイン キューの UI を更新する必要があります。

私は似たようなことをしています。これが私のコードです:

dispatch_queue_t imgDownloaderQueue = dispatch_queue_create("imageDownloader", NULL);
dispatch_async(imgDownloaderQueue, ^{
    NSString *avatarUrlString = [avatarImageDictionary objectForKey:@"url"];
    avatarImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:avatarUrlString]]];

    dispatch_sync(dispatch_get_main_queue(), ^{
        id asyncCell = [self.tableView cellForRowAtIndexPath:indexPath];
        [[asyncCell avatarImageView] setImage:avatarImage];
    });
});
于 2012-12-26T09:13:21.417 に答える