Похоже, вы запрашиваете доступ к службам определения местоположения и сразу после этого проверяете статус авторизации, ожидая, что он будет доступен немедленно. Это не так, как это работает. Когда вы запрашиваете местоположение с помощью locationManager.requestWhenInUseAuthorization
, запрос происходит асинхронно.
Когда статус местоположения изменится, он вызовет функцию, которую вы включили locationManager(_:didChangeAuthorization)
с новым статусом. Это произойдет, когда пользователь нажмет «Разрешить» или «Запретить» в появившейся подсказке. Это также может произойти, когда они заходят в настройки и меняют там разрешения
Чтобы сделать это более понятным, проверьте и зарегистрируйте статус авторизации, прежде чем запрашивать местоположение. Используйте следующие методы, чтобы узнать, был ли запрос местоположения успешным или неудачным:
func locationManager(CLLocationManager, didUpdateLocations: [CLLocation])
func locationManager(CLLocationManager, didFailWithError: Error)
Вы можете использовать чек CLLocationManager.locationServicesEnabled()
, чтобы обернуть запрос на услуги определения местоположения. Если местоположение отключено для устройства, то запрос местоположения вызовет только ошибку.