我可以从 block 中获取变量值吗?
- (Params *) getParams {
__block Params* params = nil;
//make post, get requests
[JSONHTTPClient getJSONFromURLWithString"http://www.blankspot.ru/api/getinterval"
params:nil
completion:^(id json, JSONModelError *err) {
NSLog(@"json = %@", json);
NSLog(@"Error = %@", err );
NSDictionary* json1 = json;
NSLog(@" %@ ob ", [json1 objectForKey"success"]);
params = [[Params alloc] initWithDictionary:json1 error:&err];
NSLog(@"params123 = %@", params); // is not null
}];
NSLog(@"params123 = %@", params); //this is null
return params;
}
在第一个变体 NSLog 中查看非空值,但 block 后的第二个变体将为 nil。
Best Answer-推荐答案 strong>
这是因为 getJSONFromURLWithString 是异步的(它使用 dispatch_async 进行请求调用),这意味着它将在另一个线程上调用,而当前线程将继续运行.
您的 NSLog 显示 nil 因为由于调用的异步性质,该 block 可能在到达 NSLog 行之后的某个时间执行(因为 URL 请求需要一些时间才能完成并且不是立即的)
关于iOS如何从 block 中获取变量值?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/25364718/
|