Stesso codice, presumo che il dispositivo stia effettivamente aggiornando la posizione due volte per qualche motivo, anche se richiamo una sola volta startUpdatingLocation() e eseguo alcuni stopUpdatingLocations() all'interno di didUpdateLocationslocationManager didUpdateLocations si attiva due volte sul dispositivo, solo una volta sul simulatore
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
let loc: CLLocation = locations[locations.count - 1]
let id = 0
let type = 0
let number = 0
createNewDataPoint(id, loc: loc, type: type, number: number)
}
In questo caso, createNewDataPoint viene chiamato due volte, creando 2 nuove datapoints. Succede solo una volta nel simulatore, quindi presumo che abbia qualcosa a che fare con il dispositivo reale e il GPS poiché il simulatore simula la sua posizione.
startUpdatingLocation() è presente nel mio codice solo una volta, su un pulsante. Fondamentalmente, si fa clic sul pulsante, vai go manager.startUpdatingLocations(), didUpdateLocations colpisce una volta sul simulatore, due volte sul dispositivo (coordinate identiche) e crea 2 nuovi punti dati.
L'unico altro codice che menziona qualsiasi cosa correlata è l'impostazione dell'accuratezza, del filtro, delle richieste di autorizzazione e di startUpdatingLocation(). C'è qualcosa che posso fare per assicurarmi che non crei il doppio dei punti dati necessari?
Penso che si possa creare una bandiera, accenderlo se ottengono 1 'didUpdateLocations'. Immagino che il problema è che l'aggiornamento di 'CLLocationManager' così veloce, e' stopUpdatingLocation' hanno bisogno di tempo per finire. – anhtu
Sebbene sia ancora necessario utilizzare una delle tecniche suggerite nelle versioni precedenti, suggerisco di controllare ios9 e utilizzare 'requestLocation' in questo caso – Paulw11