//EDIT2: おそらくそれで問題が解決し、独自の座標セッターを実装して、そこにリバース ジオコーダーをリクエストします。
-(NSString *)subtitle{
if (!subtitle) {
return @"No Street";
} else {
return subtitle;
}
}
-(NSString *)title{
return @"Saved position";
}
- (void)setCoordinate:(CLLocationCoordinate2D)c {
MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c];
rvg.delegate = self;
[rvg start];
coordinate = c;
}
-(id)initWithCoordinate:(CLLocationCoordinate2D) coor{
self.coordinate=coor;
NSLog(@"%f,%f",coor.latitude,coor.longitude);
return self;
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@"fail %@", error);
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
self.subtitle = [placemark.addressDictionary valueForKey:@"Street"];
}
// オリジナル:
まず、あなたのバグについて話しましょう :D
return [NSString stringWithFormat:@"%f", streetAddress];
%f
は浮動小数点値用であるため、文字列は表示されません。
2 つ目は、streetAddress
現時点では変数が存在しないため、ヘッダー ファイルに変数を記述してアクセスできるようにする必要があることです。
次に、この行が呼び出されなかった後にすべてinitWithCoordinate:
を呼び出します。return self;
だからあなたReverseGeocoder
は決して始めません。
NSString *streetAddress = …
ここでアドレスを保存したいのですが、このメソッドにのみ存在する変数に書き込むだけです。メソッドが完了すると、この変数は解放されます。ヘッダー ファイルで定義した場合は、クラス全体の変数に保存します。
それでは、それを行う方法について説明しましょう。私がすることは、リバース ジオコーダーを注釈から外して、mapView コントローラーに配置することです。次に、新しい場所を取得したら、注釈のサブタイトルを変更します。
[[mapView.annotations objectAtIndex:0] setSubtitle:@"Address Information"];
//編集: あなたのログを記録するdidFailWith
と、彼がそのポジションをリクエストできないことがわかります。リターンの上に reverseGeocoder-init を配置しても、場所をリクエストするのに十分な時間がありません。