2

我在同时处理Geofence和用户当前位置时遇到问题。

当应用程序开始工作时,didUpdateLocations完美调用并且我拥有所需的用户位置。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

但只要didEnterRegion代表被召唤,

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {}

didUpdateLocations不会再开火了。他们有关系吗?

我还检查了

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {}

didEnterRegion被调用后状态没有改变。我还添加了

locationManager?.startUpdatingLocation()

didEnterRegion但仍然didUpdateLocations没有被调用。

有谁知道问题出在哪里?如何跟踪区域中的位置?

PS:在调用 EnterRegion 时自动停止更新位置,在调用 ExitRegion 时自动开始更新位置

更新:我使用xCode9,iOS 10,swift 4。两者都是空的EnterRegionExitRegion我现在只是在其中打印一个日志,他们将来会向服务器发布一些数据。

4

1 回答 1

2

didUpdateLocations 将不再触发。他们有关系吗?

不!这里

在这里didChangeAuthorizationStatus毫无意义。授权保持不变。它刚刚停止。

正常跟踪不会对 regionMonitoring 产生任何影响。这是由操作系统管理的。

更新仅在应用程序暂停时停止,从而防止应用程序被唤醒以处理这些事件。

我的猜测是,当您进入某个区域时,您的应用程序将不再暂停并且可以再次开始跟踪,因此您必须确保您的应用程序没有被暂停。要跟踪你可以使用UIApplication.shared.backgroundTimeRemaining. 看这个例子

  • 避免使用模拟器进行测试。由于应用程序生命周期有点混乱。请参阅Apple 员工的这篇文章。您必须断开与 Mac 的连接并使用日志记录,这样您才能获得真正的体验
  • 确保你看到这个问题。它会引导您了解一些地理围栏限制,我不确定 Apple 从那时起改进了多少

但老实说,我仍然认为你只是犯了一个简单的错误,最终以某种方式让你的 locationTracking 停止了......

于 2017-12-16T13:15:15.673 回答