0

全て:

私は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)デバッグステートメントを設定するだけアセンブリ言語の束に私を導きます。

ここで何が問題なのか誰にもわかりますか?または何か提案はありますか?本当にありがたいです。

4

0 に答える 0