didEnterRegion 和 didDetermineState 都调用了

Posted

技术标签:

【中文标题】didEnterRegion 和 didDetermineState 都调用了【英文标题】:Both didEnterRegion and didDetermineState called 【发布时间】:2017-07-20 12:17:38 【问题描述】:

我在我的应用中使用了区域监控功能。我想在用户进入该区域以及他是否已经在该位置时收到通知。

因此实现了位置管理器的didEnterRegiondidDetermineState

现在的问题是当我进入地理围栏区域时,它会通知两次。一个来自 didEnterRegion,另一个来自 didDetermineState。

什么是最好的解决方案?输入时只需要通知一次。

【问题讨论】:

贴出你所有的 location manager 相关的 delagate 方法实现代码。 @KrishnarjunBanoth 我只是使用 Localnotification 来触发警报。在这种情况下,它触发了两次,一次来自 enter,另一个来自确定状态。 其实是location manager本身的常见行为。第一个委托方法调用 didDetermineState 然后它通过调用 didEnter 区域来符合,只需将您的逻辑放在 didEnterRegion 中。 那么当进入区域时,状态为 Inside 的 didDetermineState 和 didEnterRegion 都会被调用? 【参考方案1】:

请仅使用“didDetermineState”。当您进入/退出该区域时,它将被调用。在“didDetermineState”中使用以下代码。

switch state
       case .inside:
       print("INSIDE")
       break
       case .outside:
       print("OUTSIDE")
       break
       case .unknown:
       print("UNKNOWN")
       break

要确定当前位置,请使用“didStartMonitoringFor”。该函数将在下面一行被调用后执行。

locationManager.startMonitoring(for: region)

在 "didStartMonitoringFor" 中使用以下行:

locationManager.requestState(for: region)

这将再次调用“didDetermineState”并将您当前的状态设为“INSIDE/OUTSIDE”

【讨论】:

以上是关于didEnterRegion 和 didDetermineState 都调用了的主要内容,如果未能解决你的问题,请参考以下文章

未调用 didEnterRegion 和 startRangingForBeacons

了解 iOS 中的 iBeacons:didDetermineState 和 didEnterRegion 事件

didEnterRegion 仅在设备唤醒时触发

iBeacons - locationManager:didEnterRegion 回调和 UUID

仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标

CoreLocation startMonitoringRegion 未触发 didenterregion /didexitregion 代表