调用didEnterRegion时,不再调用didUpdateLocations

时间:2017-12-16 06:45:37

标签: ios swift core-location geofencing region-monitoring

我在处理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()
<{1>}中的

但仍未调用didEnterRegion

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

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

更新:我使用xCode9,iOS 10,swift 4. didUpdateLocationsEnterRegion都是空的,我现在只打印一个日志,它们是将来会将一些数据发布到服务器上。

1 个答案:

答案 0 :(得分:2)

  

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

不!请参阅here

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

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

  

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

我的猜测是,当您进入某个区域时,您的应用不再被停用,并且可以再次开始跟踪,因此您必须确保您的应用不会被暂停。要跟踪您可以使用UIApplication.shared.backgroundTimeRemaining。见this example

  • 避免使用模拟器进行测试。由于应用程序生命周期有点搞砸了。见this post from an Apple employee。您必须与Mac断开连接并使用logging才能获得真实的体验
  • 确保您看到this question。它将引导您解决一些地理围栏限制,我不确定Apple自那时起有多少改进

但说实话,我仍然认为你只是犯了一个简单的错误,不知何故最终让你的locationTracking停止了......