Objective-C块和变量范围

Nic*_*ard 3 cocoa-touch objective-c ios objective-c-blocks

我想NSData在我的块中设置一个对象的值.有人能让我知道我在这里做错了什么吗?

// Data
__block NSData *data = nil;

[ZSURLConnection performRequestWithUrl:wsdlURL xmlString:xml completionHandler:^(NSData *response, NSError *error) {

    // Handle the error
    if (error) {
        NSLog(@"Error: %@", [error localizedDescription]);
    } else {
        data = response;
    }//end

}];//end block

if (data) {
    NSString *d = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    NSLog(@"DATA --- %@", d);
}

return data;
Run Code Online (Sandbox Code Playgroud)

为什么我不能将响应分配给data我的块之外然后检索它?

Jon*_*pan 7

因为块在您的方法的其余部分异步运行.重写您的调用代码以使用异步加载,或者找到一种同步执行块工作的方法.我不知道是什么ZSURLConnection,但检查它是否有一个版本的"执行..."方法不在后台运行.