问题:在viewDidLoad()中执行getReports()之前,我需要获取位置坐标。如您所见,我首先在viewDidLoad()中调用startLocationUpdates。不幸的是,在调用startLocationUpdates()和didUpdateLocations被调用之间存在延迟。此延迟导致每次执行getReports()之前,纬度和经度坐标为零。

我如何确定didUpdateLocations称为BEFORE getReports(),以便正确设置纬度和经度值?

override func viewDidLoad() {
    super.viewDidLoad()

    self.startLocationUpdates()

    // Do any additional setup after loading the view.
    self.mapView.delegate = self

    if mblnLocationAcquired {
        getReports()
    }

    }

}

func startLocationUpdates() {
    var currentLocation = CLLocation()

    mLocationManager.desiredAccuracy = kCLLocationAccuracyBest
    mLocationManager.delegate = self
    //mLocationManager.requestWhenInUseAuthorization()
    mLocationManager.requestWhenInUseAuthorization()
    mLocationManager.startUpdatingLocation()
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

    let location = locations.last as CLLocation
    self.mdblLat = location.coordinate.latitude
    self.mdblLong = location.coordinate.longitude

    println("didUpdateLocation  \(location.coordinate.latitude), \(location.coordinate.longitude)")
    mLocationManager.stopUpdatingLocation()
    mblnLocationAcquired = true
}

最佳答案

我如何确定didUpdateLocations称为BEFORE getReports(),以便正确设置纬度和经度值?


简单。在正确设置纬度和经度之前,请勿致电getReports()!通过在第一个更新到达后立即关闭更新,您犯了一个巨大的错误。请记住,开始位置更新后,GPS“预热”需要花费大量时间。您将收到大量的初始更新,其中的位置是毫无意义或相距甚远的。您需要使用位置的准确度读数,以便等到显示出合适的值后再显示任何内容。

关于ios - Swift-从didUpdateLocations获取GPS坐标花费的时间太长,无法返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29495243/

10-09 18:32