我是 ObjC 的新手,我正在努力使用 CLGeocoder。我希望能够用于reverseGeocodeLocation
获取一个字符串,该字符串包含当用户按下完成按钮时我传递给我的委托的用户位置。
所以用户触发了 MapViewController 的显示,我在第一次调用 reverseGeocodeLocationviewDidLoad
时[placemarks count = 0]
,我没有地标来获取我需要的信息。用户第二次触发 MapViewController 的显示时,placemarks 数组已被填充并且一切正常。
我怀疑这与 reverseGeocodeLocation 是一个异步调用有关 - 但我不知道如何解决这个问题。我曾尝试在线搜索,但似乎没有什么能帮助我理解我做错了什么以及如何解决这个问题。提前致谢。
@interface MapViewController ()
@property (strong, nonatomic) CLGeocoder *geocoder;
@property (readwrite, nonatomic) NSString *theLocationName;
@end
@implementation MapViewController
@synthesize mapView, geocoder, delegate = _delegate, theLocationName = _theLocationName;
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate=self;
self.mapView.showsUserLocation = YES;
[self theUserLocation];
}
-(void)theUserLocation
{
if (!geocoder)
{
geocoder = [[CLGeocoder alloc] init];
}
MKUserLocation *theLocation;
theLocation = [self.mapView userLocation];
[geocoder reverseGeocodeLocation:theLocation.location
completionHandler:^(NSArray* placemarks, NSError* error)
{
if ([placemarks count] > 0)
{
CLPlacemark *placemark = [placemarks objectAtIndex:0];
[self setTheLocationName: placemark.locality];
}
}];
- (IBAction)done:(id)sender
{
[[self delegate] mapViewControllerDidFinish:self locationName:[self theLocationName]];
}
@end