完成块
问题描述:
在我的viewController中,我创建了一个类QuestionParser的实例,它将启动一个XML解析器。我的问题是:是否有可能解析器在程序到达compblock之前不会完成解析,从而返回nil参数或者甚至是错误?完成块
MenuViewController.m
QuestionParser *parser = [[QuestionParser alloc]init];
[parser parseCategories:^(NSArray *categoryName, NSArray *categoryID)
{
if(categoryName)
{
NSlog(@"%@",categoryName);
}
}];
QuestionParser.m
(无效)parseCategories:(myCategoryCompletion)compblock {
[自parseCategories];
compblock(categoryName,categoryID);
}
我很抱歉,我没有提供所有的信息,我会尝试澄清情况。在parseCategories
功能我这样做:
- (无效){parseCategories
NSLog(@"<> start parsing categories <>"); categoryParser = [[NSXMLParser alloc]initWithContentsOfURL:[URL]]; [categoryParser setDelegate:self]; [categoryParser parse]; }
,我希望这样结束块不我解析器的委托 “didFinishDocument
” 到达之前结束。情况会是这样吗?
现在,虽然测试这个函数,一切正常,我的解析器委托创建我需要从XML的数组,然后,它到达块compblock(categoryName,categoryID)结束返回视图控制器我什么需要。我徘徊,如果解析器需要很长时间它仍然会工作?
答
您不必担心这一点。 NSXMLParser的“解析”是同步的。除非完成或失败返回,否则“解析”将结束。
无法理解问题。 – Abizern
您尚未提供有关'parseCategories'方法的足够信息。 – Wain
为了回答你的问题,我们需要看看'parseCategories:'的实现。 – neilco