2016-07-11 23 views
0

Bei der Abfrage der Standorterlaubnis ist ein Fehler aufgetreten: "Es wird versucht, MapKit-Standortaktualisierungen ohne Aufforderung zur Standortautorisierung zu starten. Zuerst muss - [CLLocationManager requestWhenInUseAuthorization] oder - [CLLocationManager requestAlwaysAuthorization] aufgerufen werden." Das Problem ist, dass ich bereits getan habe und es funktionierte früher gut, bis ich ein URL-Schema für etwas völlig anderes hinzufügte.Fehler beim Ersuchen um Standorterlaubnis

Dies ist in meinem Viewcontroller:

override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.requestAlwaysAuthorization() 
     self.locationManager.startUpdatingLocation() 
     self.mapView.showsUserLocation = true 
     //your loc 
     mapView.delegate = self 
     let initialLocation = CLLocation(latitude: 39, longitude: 77) 
     centerMapOnLocation(initialLocation) 
     } 
+0

Was ist der Fehler? um Ihnen zu helfen, brauchen wir einige Details –

+0

requestAlwaysAuthorization() zeigt dem Benutzer einen Dialog, auch wenn sie der schnellste Benutzer der Welt sind, ich glaube nicht, dass sie den Dialog in dem winzigen Bruchteil einer Sekunde zuvor akzeptieren können startUpdatingLocation() wird in der nächsten Codezeile ausgeführt. Und was, wenn der Benutzer keine Erlaubnis erteilt? Es gibt Millionen von Anleitungen und Fragen dazu, wie Sie die Autorisierung von Anträgen implementieren können. Sie können sie lesen. Sie sind nicht so einfach wie die wenigen Codezeilen, die Sie haben. – Gruntcakes

Antwort

2

Sie müssen sich fragen, ob der Benutzer bereits erteilt Erlaubnis, ihre Lage zu verfolgen:

if CLLocationManager.authorizationStatus() == .NotDetermined { 
    manager.requestAlwaysAuthorization() 
} 

Dann benötigen Sie eine Callback-Funktion, die aufgerufen wird, wenn Die Berechtigung wird erteilt:

func locationManager(manager: CLLocationManager, 
        didChangeAuthorizationStatus status: CLAuthorizationStatus) 
{ 
    if status == .AuthorizedAlways || status == .AuthorizedWhenInUse { 
     manager.startUpdatingLocation() 
     // ... 
    } 
} 

Denken Sie daran, dass Sie dies asynchron durchführen müssen Sie wissen, wann Sie nach Berechtigungen fragen müssen (wenn beispielsweise ein View-Controller geladen wurde), aber Sie wissen nicht, wann der Benutzer auf die Schaltfläche "Zulassen" klickt.

Und vergessen Sie nicht, die oder NSLocationAlwaysUsageDescription einzustellen, sonst wird es nicht aufgefordert.