2016-04-11 2 views
5

So gibt es die neue requestLocation() Methode auf iOS9. Ich versuche, es zu benutzen, um nur einen Standort-Update zu erhalten, aber es trifft die didUpdateLocations mehrere Male.requestLocation() in iOS 9 ruft die didUpdateLocation Delegierten mehrmals

Ist das nicht annehmen, es nur einmal anrufen? Ich habe distanceFilter auf 1000.0 gesetzt, also ist es ziemlich breit, um schnell zurückzukehren. Irgendwelche Ideen ?

auch wenn ich die stopUpdatingLocation() innerhalb der Delegat-Methode aufrufen, erhalte ich noch drei Treffer des Delegierten.

Hinweis: gleiche Verhalten tritt auf, wenn i StartUpdatingLocation stattdessen verwenden, möchte ich nur eine einzige Rückkehr als i des Benutzers aktuellen Land erhalten wollen, so die Position füttern

dank

Voraus reversegeocoder ist

Hier der Code:

func getLocationOneTime(accuracy: Double){ 
    print("Acquiring location one time - accuracy requested:\(accuracy)") 
    locationManager.distanceFilter = accuracy 
    locationManager.desiredAccuracy = accuracy 
    // Start gpsOneTimeTimeout timer 
    gpsTimeoutTimer = NSTimer.scheduledTimerWithTimeInterval(gpsOneTimeTimeout, target: self, selector: #selector(self.reportTimeout), userInfo: nil, repeats: false) 
    locationManager.requestLocation() 
    } 
+0

wo im Code rufen Sie diese Methode? –

+0

@Jess aktualisierten Code oben – jelipito

+0

Ich sehe das gleiche Phänomen. Ich betrachte es als einen Fehler. Es hat etwas mit dem Caching zu tun (das sieht man an den Zeitstempeln der Orte, die man bekommt). – matt

Antwort

4

die Regel für diese Art von Problem, das ich eine nur verwenden, wenn Anweisung der Delegatfunktion etwas zu ändern nach dem ersten Aufruf zu verhindern

in diesem Fall, wenn Sie nur für den Standort suchen ich tun würde:

let locationManager = CLLocationManager() 
var userLocation: CLLocation! 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if userLocation == nil { 
     if let location = locations.first { 
      userLocation = location 
      self.locationManager.stopUpdatingLocation() 
     } 
    } 
} 

Edit: Ich habe für diesen einen Blick auf die Apple-Dokumentation hatte, und Sie sind die Dinge richtig tun, ich bezweifle, Sie werden in der Lage, es durch irgendwelche vernünftige Mittel leider zu verhindern.