全部:
我正在努力解决一个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)只是设置调试语句引导我进入一堆汇编语言。
谁能发现这里出了什么问题?或者有什么建议?我真的很感激。