所有
我正在解决dispatch_async()
问题。我的目标是让TableViewController(TopStoriesTVC)显示一些rss feed。 xml提取和解析被分解为一个名为Reporter的类。
TopSToriesTVC告诉记者fetchNewsFrom:。一旦完成,并且xml解析完成,Reporter将调用TopStoriesTVC的fileStories:fromReporter:method。
-(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];
}
//在Reporter中......
-(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)设置调试语句只会让我陷入一堆汇编语言。
有人能发现这里出了什么问题吗?或者有任何建议吗?我真的很感激。