Завершение блоков
В моем viewController я создаю экземпляр класса QuestionParser, который запустит парсер xml. Мой вопрос: есть ли возможность, чтобы синтаксический анализатор не закончил синтаксический анализ до того, как программа достигнет compblock, возвращая, таким образом, нулевой аргумент или даже ошибку?
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 ответ
Вам не нужно беспокоиться об этом. "Разбор" NSXMLParser является синхронным. До тех пор, пока не завершится или не вернется ошибка, "parse" закончится.