我正在尝试使用reverseGeocodeLocation返回用户的状态。我正在使用此代码从另一个视图中提取用户的位置。
NSString *userState =[(PDCAppDelegate *)[UIApplication sharedApplication].delegate
getAddressFromLocation];
我收到以下错误:'NSInvalidArgumentException',原因:' - [PDCAppDelegate getAddressFromLocation]:无法识别的选择器发送到实例。我在PDCAppDelegate中使用的代码返回地址如下。
-(NSString *)getAddressFromLocation:(CLLocation *)location {
NSString *address;
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError
*error)
{
if(placemarks && placemarks.count > 0)
{
CLPlacemark *placemark= [placemarks objectAtIndex:0];
NSString *address = [NSString stringWithFormat:@"%@ %@,%@ %@", [placemark
subThoroughfare],[placemark thoroughfare],[placemark locality], [placemark
administrativeArea]];
NSLog(@"%@",address);
}
}];
return address;
}
任何人都知道如何解决这个问题?谢谢!
答案 0 :(得分:1)
CLGeocoder方法reverseGeocodeLocation:completionHandler:
以异步方式运行。这意味着您无法从getAddressFromLocation:
返回地址,因为从此方法返回时,地址根本就没有设置。
当地理编码器收到地址(或调用导致错误)时,它将运行completionHandler。您必须在完成处理程序中设置或显示地址。
最容易发送NSNotification,可能不是最好的方式:
-(void)getAddressFromLocation:(CLLocation *)location {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
{
if (!placemarks) {
// handle error
}
if(placemarks && placemarks.count > 0)
{
CLPlacemark *placemark= [placemarks objectAtIndex:0];
NSString *address = [NSString stringWithFormat:@"%@ %@,%@ %@", [placemark subThoroughfare],[placemark thoroughfare],[placemark locality], [placemark administrativeArea]];
// you have the address.
// do something with it.
[[NSNotificationCenter defaultCenter] postNotificationName:@"MBDidReceiveAddressNotification"
object:self
userInfo:@{ @"address" : address }];
}
}];
}