didUpdateLocations может быть вызван только один раз - PullRequest
0 голосов
/ 04 июня 2018
func startLocationManager() {
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
            locationManager.startUpdatingLocation()
        }
}

После получения авторизации местоположения я вызвал этот метод в viewDidLoad(), а затем начинает вызываться func locationManager(_:, didUpdateLocations:).

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let lastLocation = locations.last!

    if lastLocation.timestamp.timeIntervalSinceNow < -5 {
        return
    }
    if lastLocation.horizontalAccuracy < 0 {
        return
    }

    var distance = CLLocationDistance(Double.greatestFiniteMagnitude)

    if let location = location {
        distance = lastLocation.distance(from: location)
    }

    if location == nil || location!.horizontalAccuracy > lastLocation.horizontalAccuracy {
        location = lastLocation
        if location.horizontalAccuracy <= locationManager.desiredAccuracy {

            stopLocationManager()

            getWeather()
        }
    } else if location == nil || distance < 1 {
        let timeInterval = lastLocation.timestamp.timeIntervalSince(location!.timestamp)
        if timeInterval > 5 {
            stopLocationManager()
            getWeather()
        }
    }
}

И вот как я заканчиваю updateLocation:

func stopLocationManager() {
        locationManager.stopUpdatingLocation()
        locationManager.delegate = nil
}

Наконец, я получил данные о местоположении, которые я хотел отлично.

Но когда я хочу повторно получить новое местоположение другими способами, то есть оно выполнило locationManager.startUpdatingLocation(), ивсе еще не может выполнить func locationManager(_:, didUpdateLocations:).

Я хочу знать, как это исправить.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Удалить это

locationManager.delegate = nil
0 голосов
/ 04 июня 2018

Не устанавливайте locationManager.delegate = nil, когда вы прекращаете обновлять свое местоположение.Или, если вы это сделаете, установите его обратно на себя, когда вы захотите снова получать обновления местоположения.

...