1

我正在尝试使用 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;
}

有人知道怎么修这个东西吗?谢谢!

4

1 回答 1

2

CLGeocoder 方法reverseGeocodeLocation:completionHandler:异步运行。这意味着您无法返回地址,getAddressFromLocation:因为当您从此方法返回时,根本没有设置地址。

当地理编码器收到地址(或调用导致错误)时,它将运行完成处理程序。您必须在完成处理程序中设置或显示地址。

最简单的方法是发送 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 }];
         }
     }];
}
于 2012-12-17T08:04:28.270 回答