__блок ivar всегда (нулевой) - PullRequest
1 голос
/ 03 декабря 2011

Я написал класс для анализа XML в блоке.ЗавершениеHandler возвращает mutableArray и ошибку (если это происходит), проблема в том, что я могу NSLog элемент массива, но если я инициирую __block NMutableArray с массивом, он возвращает нуль:

__block NSMutableArray *imagesURLs;
   NCBlockParser *parser = [[NCBlockParser alloc] init];
   [parser parseXMLFromURL:url withElementsName:[NSArray arrayWithObject:@"element"] completionHandler:^(NSMutableArray *item, NSError *err) 
    {
    if (err) {
        NSLog(@"%@",[err localizedDescription]);
    }
    else {
        imagesURLs = [[NSMutableArray alloc] initWithArray:item];
    }
    }];

   NSLog(@"%@",imagesURLs); // (null) here :(

Идеи?

1 Ответ

2 голосов
/ 03 декабря 2011

Итак, у вас есть некоторая путаница в отношении того, как работают блоки.

Строка NSLog запускается задолго до того, как блок будет выполнен.Ваша переменная imagesURL заполняется только после того, как ваш синтаксический анализ возвращается, что делается асинхронно.Переместите NSLog внутрь блока, и вы увидите, что ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...