CLGeocoder オブジェクトを使用して iOS 5 でアドレスをジオコーディングし、結果の CLLocation をインスタンス変数に入れようとしています。何らかの理由で、インスタンス変数を設定してゲッターを呼び出すことができますが、Geocoder の完了ハンドラーの範囲外で変数の値が失われます。
.h ファイルで変数を宣言しました。
@property (nonatomic, strong) CLLocation *specifiedPosition;
次に、それを私の.mで合成しました:
@synthesize specifiedPosition = _specifiedPosition;
そして、次のようにジオコーダーを使用しようとしました-最初の NSLog は緯度と経度を返しますが、2番目は返しません:
-(void)getLatLong:(NSString *)locationText
{
if (!self.geocoder)
{
self.geocoder = [[CLGeocoder alloc] init];
}
[self.geocoder geocodeAddressString:locationText completionHandler:^(NSArray *placemarks, NSError *error){
if ( ([placemarks count] > 0) && (error == nil)) {
self.specifiedPosition = [[placemarks objectAtIndex:0] location];
NSLog(@"Specified Location variable is set to: %@", self.specifiedPosition);
} else if (error == nil && [placemarks count] == 0){
// TODO
NSLog(@"Can't find data on the specificed location");
}
else if (error != nil){
// TODO
NSLog(@"An error occurred = %@", error);
}
}];
NSLog(@"Specified Location variable is set to: %@", self.specifiedPosition);
}
カスタムセッターも試しましたが、役に立ちませんでした:
-(void)setSpecifiedPosition:(CLLocation *)specifiedPosition
{
_specifiedPosition = specifiedPosition;
}
よろしくお願いします。