1

次のコードを使用して、ジオコード 2 の場所名を座標に転送しようとしています。

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:place 
                      inRegion:nil 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 NSLog(@"a");
                 NSLog(@"count %d", [placemarks count]);
                 for (CLPlacemark* aPlacemark in placemarks) {
                     CLLocationCoordinate2D coord = aPlacemark.location.coordinate;

                     NSLog(@"%f, %f", coord.latitude, coord.longitude);
                 }
             }];

[geocoder geocodeAddressString:place 
                      inRegion:nil 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 NSLog(@"b");
                 NSLog(@"count %d", [placemarks count]);
                 for (CLPlacemark* aPlacemark in placemarks) {
                     CLLocationCoordinate2D coord = aPlacemark.location.coordinate;

                     NSLog(@"%f, %f", coord.latitude, coord.longitude);
                 }
             }];

簡単にするために、1 つの地名を 2 回変換します。コードを実行すると、最初のジオコーディング完了ハンドラーのみが実行されます。残りのジオコーディング完了ハンドラーは無視されます。

なぜそれが起こるのか、そして複数の場所を変換する方法を知りたい.

4

2 に答える 2

1

一度に複数のジオコーディング操作を行うことは想定されていません。ブロックは非同期で発生するため、最初のジオコーディング操作が完了する前に、2 番目のジオコーディング操作が開始される可能性があります。ドキュメントは次のとおりです。

このメソッドは、指定された位置データを非同期でジオコーディング サーバーに送信し、返します。完了ハンドラ ブロックはメイン スレッドで実行されます。フォワード ジオコーディング リクエストを開始した後は、別のフォワード ジオコーディング リクエストまたはリバース ジオコーディング リクエストを開始しようとしないでください。

于 2012-05-18T13:51:24.957 に答える
1

Apple のガイダンスを参照してください: http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html

アプリケーションは、ジオコーディングの使用方法を意識する必要があります。このクラスを効果的に使用するための経験則を次に示します。

1) 1 つのユーザー アクションに対して最大 1 つのジオコーディング リクエストを送信します。

2) ユーザーが同じ場所のジオコーディングを含む複数のアクションを実行する場合、アクションごとに個別のリクエストを開始するのではなく、最初のジオコーディング リクエストの結果を再利用します。

3) ユーザーの現在地を自動的に更新する場合 (ユーザーが移動している場合など) は、ユーザーがかなりの距離を移動し、妥当な時間が経過した後にのみ、新しいジオコーディング リクエストを発行します。たとえば、典型的な状況では、1 分間に複数のジオコーディング リクエストを送信しないでください。

4) ユーザーがすぐに結果を確認できないときに、ジオコーディング リクエストを開始しないでください。たとえば、アプリケーションが非アクティブまたはバックグラウンドである場合は、リクエストを開始しないでください。

于 2012-05-18T13:53:38.880 に答える