0

全部:

我正在努力解决一个dispatch_async()问题。我的目标是让 TableViewController (TopStoriesTVC) 显示一些 rss 提要。xml 获取和解析被分解为一个名为 Reporter 的类。

TopSToriesTVC 告诉记者 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];
});

那些根本不起作用。我正在使用 get_main_queue() 因为 fileStories:fromReporter: 包含一个[self.tableView reloadData];语句,我知道这需要在主线程上发生。

当我说它们“根本不工作”时,具体来说,我得到 a)控制台中没有错误消息,b)tableView 中没有任何内容,c)我的NSXMLParserDelegate方法甚至没有被调用,d)只是设置调试语句引导我进入一堆汇编语言。

谁能发现这里出了什么问题?或者有什么建议?我真的很感激。

4

0 回答 0