Swift CLLocation不会在启动时更新位置

时间:2015-05-24 19:10:49

标签: ios multithreading swift cllocationmanager

我有一个应用程序,我想在viewDidLoad中获取用户位置,然后我将lat和long存储在变量中,并在函数中使用它们来根据用户的位置获取数据。我有一个定时器,每x分钟调用一个函数来获取数据(让我们称之为getData()),第一次getData()被称为lat而long是0,但是第二次,第三次等......他们有值。

当我在模拟器中更新coords(在运行时)时,我确实获得了lat和long的更新值,但这是第一次运行lat和long始终为0.我的代码如下所示:

nextLine

由于某种原因,第一次运行lat和long都是0,其余的运行它们都有一个有效值。问题是getData在locationManager和displayLocationInfo方法之前被调用,即使我在调用getData()之前添加了self.locationManager.startUpdatingLocation()由于某种原因。

1 个答案:

答案 0 :(得分:0)

我真的不明白你的代码应该做什么。

您的viewDidLoad中没有GCD代码的理由。只需创建一个位置管理器的实例,并告诉它开始更新您的位置。

然后,一旦位置可用,就会调用didUpdateLocations方法。使用您在该方法中获得的位置数组中的最后一个位置 - 它将是最新的位置。

我建议在使用之前检查位置的horizo​​ntalAccuracy。通常情况下,前几个位置读数非常糟糕,然后慢慢读数稳定下来。水平精度读数实际上是一个半径,给出了可能的读数区域。如果你得到1公里,这意味着你的位置可以是半径1公里的圆圈中的任何地方。你可能想放弃那些糟糕的读数并等待几百米(或更好)的读数。

您的viewDidLoad方法正在调用getDeparturesAtStop方法,并且可能会在第一次调用didUpdateLocations之前调用该方法。 (你不能表明那种方法的作用。)

获得零纬度/长度的代码在哪里?