我想在我的块中设置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;
为什么我不能将响应分配给data
然后在我的区块之外检索它?
答案 0 :(得分:7)
因为块以异步方式运行,在之后的其余方法。重写您的调用代码以使用异步加载,或者找到一种同步执行块工作的方法。我不知道ZSURLConnection
是什么,但请检查它是否有一个不在后台运行的“perform ...”方法版本。
答案 1 :(得分:3)
performRequestWithUrl:xmlString:completionHandler:
不是同步方法。它设置一个异步请求,然后立即返回。您的方法的其余部分将运行并返回。
请求完成后,才会运行您的块,该块会分配data
,然后立即将其丢弃。
如果这是一个同步方法,您的例程将阻止等待昂贵的网络操作。如果这是主线程,你的整个应用程序将挂起。 ZSURLConnection
(和NSURLConnection
)旨在避免这种情况。