__block ivar总是(null)

时间:2011-12-02 20:11:14

标签: cocoa-touch

我写了一个类来解析块上的XML。 completionHandler返回一个mutableArray和一个错误(如果它发生),问题是我可以NSLog数组的元素,但如果我用数组初始化__block NMutableArray它返回null:

__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 个答案:

答案 0 :(得分:2)

所以,你对块的运作方式有些困惑。

NSLog行在块执行之前很久就会运行。您的imagesURL变量仅在您的解析返回后填写,这是异步完成的。将NSLog移到块内,您应该会看到您期待的内容。