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