2016-07-19 29 views
2

In meiner App versuche ich, Länge und Breite von GPS zu bekommen. Um das zu tun, muss ich den Benutzer nach der Erlaubnis fragen, auf seinen Standort zuzugreifen. Bevor ich tun, dass ich zu Info.plist diese zwei rulees hinzufügen: Privacy - Location When In Use Usage Description und Privacy - Location Always Usage Description, dann in AppDelegate bitte ich um Erlaubnis (SWIFT 3.0) zu tun:CLLocation Prompt zeigt und verschwindet in einem Moment

if CLLocationManager.locationServicesEnabled() == true { 
     let localisationManager = CLLocationManager() 
     localisationManager.requestWhenInUseAuthorization() 
     localisationManager.startUpdatingLocation() 
    } 

I UIAlertController für einen Moment sehen kann, während die App läuft, aber fast in der gleichen Zeit verschwindet es und ich habe keine Zeit zu tippen Allow und ich kann GPS nicht verwenden. Wie man es repariert?

Arbeitslösung meines Problems:

I separaten Variablen erstellt var locationManager = CLLocationManager() in class LocationManager and then I used it in function.

Antwort

2

Das Problem ist, dass localisationManager Objekt freigegeben wird, bevor die Zulassung Prompt erscheint ... requestWhenInUseAuthorization läuft in einer verzögerten Art und Weise, so dass diese Instanz von CLLocationManager unter Ihnen herausgezogen werden.

Ändern Sie daher den Bereich localizationManager in Ihre View Controller-Klasse anstelle einer lokalen Variablen.

class ViewController: UIViewController { 
let localisationManager = CLLocationManager() // <-- scope to class 

//... 
function requestAuthorization() { 
    localisationManager.requestWhenInUseAuthorization() 
} 

} 

Sie könnten alternativ Umfang der CLLocationManager zu AppDelegate.

Das ist schön in dem Video WWDC 2016 erklärt Kern Lage Best Practices in der Nähe von Minute 21 der Sitzung.