WatchKit CoreLocation проблема

Я пытаюсь прочитать текущие координаты местоположения в WatchKitExtension ExtensionDelegate. Это, однако, не возвращает никакого значения.

Тот же код, который используется в WatchKitExtension InterfaceController, действительно возвращает местоположение. (попробовал это из отчаяния, так как я не смог найти ошибку в коде)

Мне нужно было бы выполнить этот код в ExtensionDelegate, так как я хотел бы передать полученное местоположение в услугу ClockKit.

Вот код в ExtensionDelegate: (после self.locationManager.requestLocation () функции делегата didUpdateLocation / didFailWithError не вызываются)

import WatchKit
import CoreLocation



class ExtensionDelegate: NSObject, WKExtensionDelegate, CLLocationManagerDelegate {

    private let locationManager = CLLocationManager()

    override init() {
        print("ExtensionDelegate: \(NSDate())  - init")
        super.init()
        self.getLocation()
    }


    func getLocation(){
        print("ExtensionDelegate: \(NSDate())  - getLocation")
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestLocation()
    }

...


    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("ExtensionDelegate: \(NSDate())  - locationManager didUpdateLocations")

        guard let mostRecentLocation = locations.last else { return }
        let place = mostRecentLocation.coordinate
        print("\(place)")
        manager.stopUpdatingLocation()
    }


    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("ExtensionDelegate: \(NSDate())  - locationManager didFailWithError")
        print("CL failed: \(error)")
    }


}

Здесь тот же самый код в InterfaceController, и он работает отлично (didUpdateLocation действительно вызывается):

import WatchKit
import Foundation
import CoreLocation

class InterfaceController: WKInterfaceController, CLLocationManagerDelegate {

    private let locationManager = CLLocationManager()

    override func awakeWithContext(context: AnyObject?) {
        print("InterfaceController: \(NSDate())  - awakeWithContext")
        super.awakeWithContext(context)
        self.getLocation()
    }

    func getLocation(){
        print("InterfaceController: \(NSDate())  - getLocation")
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestLocation()
    }

   ...

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("InterfaceController: \(NSDate())  - locationManager didUpdateLocations")

        guard let mostRecentLocation = locations.last else { return }
        let place = mostRecentLocation.coordinate
        print("\(place)")
        manager.stopUpdatingLocation()
    }


    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("InterfaceController: \(NSDate())  - locationManager didFailWithError")
        print("CL failed: \(error)")
    }
}

Ответы на вопрос(0)

Ваш ответ на вопрос