locationManager:didUpdateLocations从未调用过

时间:2016-02-17 13:48:49

标签: ios swift cllocationmanager cllocation

我在ViewController中有这个代码:

@IBAction func testButton(sender: UIButton) {
        let locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        print("\(CLLocationManager.locationServicesEnabled())")
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        print("Started updating location")
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation: CLLocation = locations[0]
        let long = userLocation.coordinate.longitude
        let lat = userLocation.coordinate.latitude
        print("\(long), \(lat)")
    }

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("Location update failed: \(error)")
    }
在我的plist中

NSLocationWhenInUseUsageDescription。它应该根据我能找到的所有信息工作,但它只是输出

true
Started updating location

edit 2 of this question是真的吗?如果是这样,那么将它移出viewController的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

startUpdatingLocation()之前,必须首先使用requestWhenInUseAuthorization()请求权限。

因此,ViewController中的代码与以下内容类似,您也可以下载示例项目here

class ViewController: UIViewController, CLLocationManagerDelegate {
    let locationManager: CLLocationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.testButton()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func testButton() {
        if CLLocationManager.authorizationStatus() != .AuthorizedWhenInUse {
                self.locationManager.requestWhenInUseAuthorization()
                return
        }

        self.locationManager.startUpdatingLocation()
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation: CLLocation = locations[0]
        let long = userLocation.coordinate.longitude
        let lat = userLocation.coordinate.latitude
        print("\(long), \(lat)")
    }

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("Location update failed: \(error)")
    }

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        if status == .AuthorizedWhenInUse {
                self.testButton()
        }
    }
}