2016-04-11 16 views
5

Quindi c'è il nuovo metodo requestLocation() su iOS9. Sto cercando di usarlo per ottenere solo un aggiornamento della posizione, ma colpisce il didUpdateLocations più volte.requestLocation() in iOS 9 chiama delegate didUpdateLocation più volte

Non è questo il caso di chiamarlo solo una volta? ho impostato distanceFilter a 1000.0, quindi è abbastanza ampio per aiutare a tornare rapidamente. Qualche idea ?

anche se chiamo il stopUpdatingLocation() all'interno del metodo delegato, ottengo ancora tre colpi del delegato.

Nota: stesso comportamento si verifica quando uso StartUpdatingLocation Invece, voglio solo un singolo ritorno come voglio ottenere paese corrente dell'utente, in modo da alimentare la posizione per reversegeocoder

grazie in anticipo

Ecco il codice:

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

dove nel codice stai chiamando questo metodo? –

+0

@Jess codice aggiornato sopra – jelipito

+0

Sto vedendo lo stesso fenomeno. Lo considero un bug. Ha qualcosa a che fare con il caching (lo puoi vedere osservando i timestamp nelle posizioni che stai ricevendo). – matt

risposta

4

di solito per questo tipo di problema mi basta usare un'istruzione if per evitare che il nulla funzione di delegato cambiare dopo la prima chiamata

.210

in questo caso, se siete solo in cerca per la posizione che vorrei fare:

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: ho avuto uno sguardo alla documentazione di Apple per questo e si stanno facendo le cose per bene, dubito che sarete in grado di prevenirlo con ogni mezzo ragionevole, purtroppo.