全て:
私はdispatch_async()
問題に取り組んでいます。私の目標は、TableViewController (TopStoriesTVC) がいくつかの RSS フィードを表示することです。XML のフェッチと解析は、Reporter というクラスに組み込まれています。
TopSToriesTVC は Reporter に fetchNewsFrom: を指示します。それが完了し、xml の解析が完了すると、Reporter は TopStoriesTVC の fileStories:fromReporter: メソッドを呼び出します。
-(void) fetchNewsFrom:(NSString *)url
TopStoriesTVC ===================================> レポーター
-(void)fileStories: fromReporter:
<===================================
これは、シングルスレッド環境でうまく機能します。しかし、いくつかの rss ストリームを取得したいので、代わりに:
// TopStoriesTVC では ...
-(id)initWithNibName:bundle: {
// stuff omitted
[self.newsReporter fetchNewsFrom:TOP_STORIES_NEWS_URL];
[self.sportsReporter fetchNewsFrom:TOP_STORIES_SPORTS_URL];
}
// レポーターで...
-(void)parserDidEndDocument:(NSXMLParser *)parser{
[self.bureauChief fileStories:self.items fromReporter:self];
}
これは完全に機能します。次を使用してそれらをラップしようとしましたdispatch_async()
:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self.newsReporter fetchNewsFrom:TOP_STORIES_NEWS_URL];
[self.sportsReporter fetchNewsFrom:TOP_STORIES_SPORTS_URL];
});
と
dispatch_async(dispatch_get_main_queue(), ^{
[self.bureauChief fileStories:self.items fromReporter:self];
});
それらはまったく機能しません。fileStories:fromReporter: には[self.tableView reloadData];
ステートメントが含まれているため、get_main_queue() を使用しています。これはメイン スレッドで実行する必要があることを理解しています。
「まったく機能しない」と言うと、具体的には、a)コンソールにエラーメッセージが表示されない、b)tableViewに何も表示されない、c)NSXMLParserDelegate
メソッドが呼び出されていない、d)デバッグステートメントを設定するだけアセンブリ言語の束に私を導きます。
ここで何が問題なのか誰にもわかりますか?または何か提案はありますか?本当にありがたいです。