1

我正在尝试对我的位置相关应用程序实现更有效的后台处理,并在此过程中学习一些 Swift。

我注意到(艰难的方式)在第一个 Beta 版中我根本无法找到工作地点,但切换到 xcode 的 Beta2 解决了这部分问题。

在我的位置处理设置中,我使用这样的代码启动了一个 LocationManager(我希望能够切换到高分辨率,甚至以高模式启动):

locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startMonitoringSignificantLocationChanges()

locationManager.startUpdatingLocation();

然后使用如下代码处理切换:

if (highResolutionSwitch.on) {
  println("Switching to high resolution");
  locationManager.stopMonitoringSignificantLocationChanges();
  locationManager.startUpdatingLocation();
} else {
  println("Switching to low resolution");
  locationManager.stopUpdatingLocation();
  locationManager.startMonitoringSignificantLocationChanges();
}

当处于“高”模式时,我会在我的didUpdateLocations()方法中收到位置,但在“低”模式下永远不会收到任何东西。是 xcode/swift-environment 的 beta 特性还是我遗漏了什么?

4

1 回答 1

10

发现问题!

问题是对的调用locationManager.requestWhenInUseAuthorization()还不够。这不会启用重大的位置更改。更改该行以locationManager.requestAlwaysAuthorization()至少使模拟器为我提供一个位置(尽管更改位置时没有新位置)。

我将重新部署我的应用程序,看看它是否适用于 IRL。

我还需要在模拟器上重新安装应用程序,以便再次给出“允许”问题。

于 2014-07-02T11:04:58.183 回答