私はObjCを初めて使用し、CLGeocoderで苦労しています。reverseGeocodeLocation
ユーザーが[完了]ボタンを押したときに代理人に渡すユーザーの場所を含む文字列を取得するために使用できるようにしたいと思います。
したがって、ユーザーがMapViewControllerの表示をトリガーし、reverseGeocodeLocationを呼び出しますviewDidLoad
が、[placemarks count = 0]
これは初めてであり、必要な情報を取得するための目印がありません。2回目にユーザーがMapViewControllerの表示をトリガーすると、目印の配列が入力され、すべてが機能します。
これは、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