Bloques Objective-C y alcance variable

Me gustaría establecer el valor de unNSData objeto dentro de mi bloque. ¿Alguien puede decirme qué he hecho mal aquí?

// 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;

Por qué no puedo asignar la respuesta adata y luego recuperarlo fuera de mi bloque?

Respuestas a la pregunta(4)

Su respuesta a la pregunta