我的代码应该返回设备的位置,以便放置引脚。
由于某种原因,当它被多次调用时,它总是返回第一次调用时返回的值。
代码中的打印件返回第一个值。我可能忽略了一些显而易见的事情,但我无法弄清楚是什么。
func getLocation ()-> CLLocation! {
locationManager.startUpdatingLocation()
var x = locationManager.location
println(x.coordinate.latitude)
println(x.coordinate.longitude)
return x
}
答案 0 :(得分:1)
问题在于这不是位置管理器的工作方式。 startUpdatingLocation()
不会立即更改位置管理器的状态。相反,它在代理方法locationManager:didUpdateLocations:
中回调。您必须设置委托并实施委托方法的委托, 是您收到位置的地方。
请注意,在该代码中,与您一样,我只想要一个位置。但是位置管理器将永远调用委托方法,直到我停止它,所以我也必须停止它。但是,在一次调用之后,我无法立即停止它,因为在获得一个好位置之前,会多次调用委托方法。我一直在检查水平精度和经过的时间,当我得到一个足够好的位置或者经过太多时间时,我会停止位置管理员(也许我们在室内并且无法获得良好的准确性)。