2013-07-25 12 views
21

ユーザーがアドレスを入力できる検索バーがアプリケーションにあり、ジオコーディングされた結果が表示されます。次のコードに応じて、ユーザーの種類として結果の更新は、:kCLErrorDomainエラー2 CLGeocoderでジオ​​コーディングを繰り返した後

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    ... 
    if (self.geocoder.geocoding) [self.geocoder cancelGeocode]; 
    [self.geocoder geocodeAddressString:searchText completionHandler:^(NSArray *placemarks, NSError *error) { 
     if (error != nil) { 
      NSLog(@"ERROR during geocode: %@", error.description); 
      return; 
     } 
     //update the view 
    }]; 
} 

これは、ユーザーが検索フィールドに入る最初の数文字のために動作します。しかし、繰り返しユーザーが複数の文字の後に、ジオコーダは(私はネットワークに問題があったことを意味知っている)、次のエラーを与えて起動します:

ERROR during geocode: Error Domain=kCLErrorDomain Code=2 "The operation couldn’t be completed. (kCLErrorDomain error 2.)" 

全体のViewControllerがあるまで、ジオコーダが再び動作しません。リロードされました。なぜこれが起こっているのでしょうか、それを解決するために何ができますか?

答えて

46

私は理由が次のようだと信じています:
Appleのジオコーダは、すべての要求に同じように答えません。代わりに、特定のデバイスからの最初の要求はすぐに回答されますが、デバイスが100以上のリクエストを送信した場合、応答が遅く遅くなるか、要求にまったく応答がないため、エラーが発生する可能性があります。
ビューコントローラをリロードすると、時間がかかるだけです。ジオコーディングサーバーは、再度応答する意思があります。 ジオコーダーサーバーは、単一のデバイスからの要求によって多重定義されないようにするため、基本的には何もできません。そこに送る要求の数を制限するだけでした。
ところでdocsは、「1分に複数のジオコーディングリクエストを送信しないでください。

+0

ああ、私はドキュメントの行に気付かなかった。完璧な意味合いを持つ。 – jburns20

+1

開発中に1週間または2週間の猶予期間があることを確かめてください:( –

0

メッセンジャーアプリケーションの場所を選択するときにこの問題が発生しました。 私の解決策は、ジオコーダー呼び出しの前に、ユーザーがパンニング・マップを停止した後、3秒の遅延を導入することでした。ユーザーがその場所を正確に欲しいことを保証する。