我有一个简单的问题......我希望解决方案也很简单!
这是我的代码:
__block NSString * response; //the result !
[deviceInfo.geocoder reverseGeocodeLocation:deviceInfo.locationProperties completionHandler:
^(NSArray *placemarks, NSError *error) {
[placemarks copy];
//Get nearby address
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"Country : %@",placemark.country);
response =placemark.country;
}
];
//-----------------------------------------------
NSLog(@"Response COUNTRY : %@",response); // response = NULL /!\
在该区块内,placemark.country
等于UK
。
我怎么能在街区之外有response = placemark.country
?
答案 0 :(得分:0)
在运行NSLog行的位置,尚未调用完成块。 reverseGeocodeLocation是一个非阻塞调用,这就是它需要一个完成处理程序的原因。
您不想做的是将其转换为同步方法。我认为你想要更新你的UI以响应地理编码的完成。做这样的事情:
我看不出“[placemarks copy]”行应该达到的目的。这完全没有意义,因为你忽略了返回值。
[deviceInfo.geocoder reverseGeocodeLocation:deviceInfo.locationProperties completionHandler:
^(NSArray *placemarks, NSError *error) {
[placemarks copy];
//Get nearby address
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"Country : %@",placemark.country);
// No need for response to be a __block variable.
NSString *response =placemark.country;
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUIWithResponse:response];
}
];
-(void)updateUIWithResponse:(NSString*)response
{
NSLog(@"Got a response: %@), response);
}