Почему locationManager (: didUpdateLocations) не вызывается - PullRequest
0 голосов
/ 19 января 2019

Я написал следующий тестовый код

 @IBAction func btnLocation(_ sender: NSButton) {
    let locManager = CLLocationManager()
    if CLLocationManager.authorizationStatus() != .authorized {
        print("not authorized")
    }
    locManager.delegate = self
    locManager.desiredAccuracy = kCLLocationAccuracyBest
    locManager.startUpdatingLocation()
    locManager.requestLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let location = locations[0]
    print(location.coordinate.latitude)
    manager.stopUpdatingLocation()
    let geoCoder = CLGeocoder()
    geoCoder.reverseGeocodeLocation(location, completionHandler: {(places, error) in
        let place: CLPlacemark = places![0]
        print(place.administrativeArea!)
    })
}

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

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    print("authorization changed")
}

но locationManager(:didUpdateLocations) не вызывается и ошибка не печатается. Если я удаляю метод locationManager(:didFailWithError), чем в начале работы, и печатается координата местоположения, но Xcode также утверждает, что «Делегат должен ответить на locationManager:didFailWithError: Что не так с моим кодом?

1 Ответ

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

Вам нужно сделать

let locManager = CLLocationManager()

экземпляром var, чтобы хранить сильную ссылку для делегата, также вам нужно либо 1 из них

locManager.startUpdatingLocation()
locManager.requestLocation()
...