Как правильно получить пользовательские координаты? - PullRequest
0 голосов
/ 21 января 2019

Я MapViewController принимаю протокол CLLocationManagerDelegate таким образом:

extension MapViewController:CLLocationManagerDelegate{

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let usrLocation:CLLocation = locations[0] as CLLocation

        // readable
        print("lat = \(usrLocation.coordinate.latitude)")
        print("lon = \(usrLocation.coordinate.longitude)")

        self.userLocation = usrLocation

        locationManager.stopUpdatingLocation()

    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
    {
        print("Error \(error)")
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

        switch status {
        case .restricted, .denied, .notDetermined:

            // no issue here because I make a very generic request to a server
            // AND I don't need user coordinates

            break

        case .authorizedWhenInUse, .authorizedAlways:

            // here I need user coordinates because I need to request content to a server
            // based on user coordinates but when I check for userLocation
            // at first I find <+0.00000000,+0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00

            print("----------------")
            print(userLocation)
            print("----------------")

            break
        }
    }

Мне нужны данные о местоположении пользователя в теле .authorizedWhenInUse/.autorizeAlways дела, потому что мне нужно отправить текущий Пользовательские координаты на сервере. Проблема в том, что когда они мне нужны, я сначала получаю местоположение пользователя, подобное этому:

 <+0.00000000,+0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00>

userLocation является членом класса viewcontroller, и его значение установлено в locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]). Должен ли я переместить запрос в эту функцию? И как я могу проверить статус пользователя в этом контексте? Я хочу отправлять запросы только тем пользователям, которые авторизовали приложение для получения своей позиции. Я надеюсь, что решение не таймер и несколько проверок, но любая помощь приветствуется: -)

1 Ответ

0 голосов
/ 21 января 2019

То, что вы получили .authorizedWhenInUse или .authorizedAlways, еще не означает, что вы уже запустили службы определения местоположения.Это просто означает, что это было разрешено.Вы не должны пытаться получить местоположение пользователя в didChangeAuthorization.

Итак, вам нужно позвонить startUpdatingLocation и переместить ваш код, который отправляет это местоположение на сервер, в ваш метод didUpdateLocations.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...