Почему authorisationStatus имеет одинаковое значение после вызова locationManager (manager: didChangeAuthorization)? - PullRequest
0 голосов
/ 07 марта 2019

Я создаю навигационное приложение, которое использует платформу 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...