Я создаю навигационное приложение, которое использует платформу iOS Core Location, и происходит нечто довольно странное.Когда я запускаю мое приложение, вызывается locationManager.requestWhenInUseAuthorization()
, в результате чего отображается предупреждение «Включить службы определения местоположения, чтобы разрешить« GoSiteUK »определять ваше местоположение».В XCode я получаю некоторую противоречивую информацию, отображаемую, когда я печатаю CLLocationManager.authorizationStatus
, чтобы быть напечатанной в различных точках в моем коде контроллера представления таблицы.Несмотря на то, что я не касаюсь оповещения, мой код вызывает locationManager(manager:didChangeAuthorization)
, предполагая, что уровень авторизации был изменен, но, очевидно, это не потому, что я ничего не выбираю в оповещении.Кто-нибудь может подсказать, что происходит?Спасибо
...
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = 10.0
print("inside viewDidLoad() BEFORE IF authorizationStatus = \(CLLocationManager.authorizationStatus().rawValue)")
if CLLocationManager.authorizationStatus() != .authorizedWhenInUse {
print("inside viewDidLoad() & 'if' BEFORE call: authorizationStatus = \(CLLocationManager.authorizationStatus().rawValue)")
// prompts user to turn on location services
locationManager.requestWhenInUseAuthorization()
print("inside viewDidLoad() & 'if' AFTER call: authorizationStatus = \(CLLocationManager.authorizationStatus().rawValue)")
}
sortedCounties = countiesArray.sorted{ $0 < $1 }
}
...
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status != .authorizedWhenInUse {
print("inside locationManager(manager:didChangeAuthorization) BEFORE call: authorizationStatus = \(CLLocationManager.authorizationStatus().rawValue)")
print("inside locationManager(manager:didChangeAuthorization) BEFORE call: status = \(status.rawValue)")
manager.requestWhenInUseAuthorization()
print("inside locationManager(manager:didChangeAuthorization) AFTER call: authorizationStatus = \(CLLocationManager.authorizationStatus().rawValue)")
print("inside locationManager(manager:didChangeAuthorization) AFTER call: status = \(status.rawValue)")
} else {
// authorized location status when app is in use; update current location
manager.startUpdatingLocation()
}
return
}
Я получаю следующий вывод из Xcode;
inside viewDidLoad() BEFORE IF authorizationStatus = 2
inside viewDidLoad() & 'if' BEFORE call: authorizationStatus = 2
inside viewDidLoad() & 'if' AFTER call: authorizationStatus = 2
inside locationManager(manager:didChangeAuthorization) BEFORE call: authorizationStatus = 2
inside locationManager(manager:didChangeAuthorization) BEFORE call: status = 2
inside locationManager(manager:didChangeAuthorization) AFTER call: authorizationStatus = 2
inside locationManager(manager:didChangeAuthorization) AFTER call: status = 2