0
 CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(27.941761 , -82.171537);

    MKReverseGeocoder *reverseGeocoder =[[MKReverseGeocoder alloc] initWithCoordinate:coordinate];
    NSLog(@"%g",coordinate.latitude);
    NSLog(@"%g",coordinate.longitude);
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
//????????????????????????????????????????????????????????????????????????

}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
NSLog(@"MKReverseGeocoder has failed.");
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark            *)placemark{

NSLog(@"current place is :%@",placemark);
}

手書き座標を使用すると、reverseGeocoding に失敗しました。しかし、(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation から取得した - 座標を使用すると、成功しました。なぜ?

4

1 に答える 1

1

あなたのコードをテスト プロジェクトにドロップしたところ、問題なく動作しました。

2013-08-16 23:45:55.966 TestMapApp[11261:a0b] 27.9418
2013-08-16 23:45:55.967 TestMapApp[11261:a0b] -82.1715
2013-08-16 23:45:57.831 TestMapApp[11261:a0b] current place is :6015 W Farkas And Turkey Creek Rd, Plant City, FL  33567, United States @ <+27.94176100,-82.17153700> +/- 0.00m

これが私が間違っていると思うことです。ARC を使用していて、" reverseGeocoder" をどこにも (ivar やプロパティなどに) 保存していないため、" reverseGeocoder" を作成した関数が終了するとすぐに、ARC はそれを解放します。

その他のいくつかのこと:

デリゲート メソッドで使用できるエラー パラメーターがある場合は、それらを使用する必要があります。このような:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
    NSLog(@"MKReverseGeocoder has failed with error %@.", [error localizedDescription]);
}

そして最後に、そして最も重要なことは、" MKReverseGeocoder" は iOS 5 以降非推奨になっていることです。iOS の将来のバージョンで廃止される可能性が高いです。リバース ジオコーディングに使用する代替品を探す必要があります。

于 2013-08-17T06:49:16.243 に答える