完成块

时间:2013-10-30 15:15:36

标签: ios xcode nsxml completion-block

在我的viewController中,我创建了一个类QuestionParser的实例,它将启动一个xml解析器。我的问题是:是否有可能因此解析器在程序到达compblock之前不会完成解析,从而返回nil参数甚至是错误?

MenuViewController.m

QuestionParser *parser = [[QuestionParser alloc]init];
[parser parseCategories:^(NSArray *categoryName, NSArray *categoryID)
{
    if(categoryName)
    {
        NSlog(@"%@",categoryName);
    }
}];

QuestionParser.m

  

(void)parseCategories:(myCategoryCompletion)compblock   {

     

[self parseCategories];

compblock(categoryName,categoryID); 
     

}

对不起,我没有提供所有信息,我会尽力澄清情况。在parseCategories函数中我这样做:

  

- (void)parseCategories {

  NSLog(@"<> start parsing categories <>");

  categoryParser = [[NSXMLParser alloc]initWithContentsOfURL:[URL]];

  [categoryParser setDelegate:self];

  [categoryParser parse]; 
}

我希望完成块在我的解析器的委托“didFinishDocument”到达之前不会结束。情况会是这样吗?

现在,在测试这个函数时,一切正常,我的解析器委托从xml创建我需要的数组,然后,它到达块compblock(categoryName,categoryID)的末尾,返回到我需要的视图控制器。我徘徊,如果解析器需要很长时间它仍然可以工作吗?

1 个答案:

答案 0 :(得分:0)

您无需担心这一点。 NSXMLParser的“解析”是同步的。除非完成或失败,否则“解析”将结束。