0

おい!基本的に、注釈の座標を逆ジオコーディングし、保存された注釈 (StorePosition) のサブタイトルとして住所を表示します。私はそれを行う方法を理解できません...何が間違っていますか?

編集; .m

    -(NSString *)subtitle{          
 return subtitle;

    - (void)setCoordinate:(CLLocationCoordinate2D)c {
        MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c];
        rvg.delegate = self;
        [rvg start];
        coordinate = c;
    }

    - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
        self.subtitle = [placemark.addressDictionary valueForKey:@"Street"]; 
    } 
4

1 に答える 1

3

//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 を配置しても、場所をリクエストするのに十分な時間がありません。

于 2010-12-29T22:16:59.513 に答える