26

次のコードを使用して、住所を座標にジオコーディングしようとしています。

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:@"6138 Bollinger Road, San Jose, United States" completionHandler:^(NSArray* placemarks, NSError* error){
                     for (CLPlacemark* aPlacemark in placemarks)
                     {
                         // Process the placemark.
                         NSString *latDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.latitude];
                         NSString *lngDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.longitude];
                         lblDestinationLat.text = latDest1;
                         lblDestinationLng.text = lngDest1;
                     }
                 }];

何度も試しましたが、デバッガーがブロックに入ることがなく、場所を取得できません。誰かが私を助けてくれますか?

よろしく
パンカイ

4

3 に答える 3

10

大丈夫、私は自分の間違いを見つけました。コードは正しく、完璧に機能します。私が取り組んでいる間ずっと、デバッガーを介して、デバッガーがブロックに入らなかった理由を理解しようとしていました。しかし今、私はデバッガーがその時点でブロックに入っていないことを知りました。場所の値を取得するのにほとんどかかりません。非同期で行われるため、見つけることができず、クラッシュ直後に値がなかったためにクラッシュしていました。コードポストブロックをブロック内に移動しましたが、すべて正常に機能しています。

于 2012-05-24T11:24:41.953 に答える
0

ブロックは、iOS4.0以降のObjectiveCの新機能です。同じ機能ブロックで動作するデリゲートメソッドとして想像できるブロック。デリゲートメソッドについては、条件によっては、ジオコーディングの作業が完了すると、ブロックがその中のコードを実行するのと同じ方法で呼び出すのに時間がかかります。Block in applesのドキュメントの詳細を読むか、http: //www.raywenderlich.com/9438/how-to-use-blocks-in-ios-5-tutorial-part-2を読むことができます。

GITHUBhttps://github.com/Mangesh20/geocodingで私のリポジトリを調べることもできます

于 2012-08-08T07:15:43.737 に答える
0

その正確なコードを実行したところ、期待どおりに機能しました。アクティブなインターネット接続があることを確認してください。

文字列にNSLogを追加して、呼び出されるかどうかを確認してください。

NSLog(@"lat: %@, lng: %@", latDest1, lngDest1);

シミュレーターまたはデバイスで実行していますか?

于 2012-05-24T11:07:14.857 に答える