2013-07-25 3 views
21

Ich habe eine Suchleiste in meiner Anwendung, die der Benutzer eine Adresse eingeben kann, und es wird mit dem geocodierten Ergebnis kommen. Die Ergebnis-Updates während der Benutzer tippt, nach dem folgenden Code:kCLErrorDomain Fehler 2 nach Geocodierung wiederholt mit 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 
    }]; 
} 

Dies funktioniert für die ersten paar Zeichen der Benutzer in das Suchfeld eingibt. Nachdem jedoch der Benutzer tippt mehr Zeichen wiederholt, beginnt der Geocoder der folgende Fehler zu geben (was ich weiß, bedeutet, dass es ein Problem mit dem Netzwerk war):

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

Die Geocoder nicht wieder arbeiten, bis die gesamte Viewcontroller ist neu geladen. Warum könnte das passieren und was kann ich tun, um es zu lösen?

Antwort

46

Ich glaube, der Grund ist der folgende:
Apples Geocoder beantwortet nicht jede Anfrage auf die gleiche Weise. Stattdessen werden die ersten Anforderungen von einem bestimmten Gerät schnell beantwortet. Wenn das Gerät jedoch mindestens 100 Anforderungen gesendet hat, werden die Antworten immer langsamer oder die Anfragen werden überhaupt nicht beantwortet, was zu einem Fehler führen kann.
Wenn Sie den View-Controller neu laden, nimmt dies einfach Zeit in Anspruch, und der Geocodierungsserver ist eher bereit, erneut zu antworten. Im Wesentlichen können Sie nichts dagegen tun, da sich der Geocoder-Server davor schützen will, durch Anfragen von einem einzelnen Gerät überlastet zu werden. Sie mussten lediglich die Anzahl der Anfragen beschränken, die Sie dort senden.
BTW: Die docs sagen "Sie sollten nicht mehr als eine Geocodierungsanfrage pro Minute senden".

+0

Oh ja, ich habe diese Zeile in der Dokumentation nicht bemerkt. Macht perfekt Sinn. – jburns20

+1

Sicher wünschen, es gäbe eine Gnadenfrist von einer oder zwei Wochen während der Entwicklung: ( –

0

Ich hatte dieses Problem bei der Auswahl des Standorts für Messenger-Anwendung. Meine Lösung bestand darin, eine Verzögerung von 3 Sekunden nach dem Stoppen der Panning-Karte vor dem Geocoder-Aufruf einzuführen. Um sicherzustellen, dass der Benutzer genau diesen Ort möchte.

Verwandte Themen