问题:在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/