didEnterRegion 和 didDetermineState 都调用了
Posted
技术标签:
【中文标题】didEnterRegion 和 didDetermineState 都调用了【英文标题】:Both didEnterRegion and didDetermineState called 【发布时间】:2017-07-20 12:17:38 【问题描述】:我在我的应用中使用了区域监控功能。我想在用户进入该区域以及他是否已经在该位置时收到通知。
因此实现了位置管理器的didEnterRegion
和didDetermineState
。
现在的问题是当我进入地理围栏区域时,它会通知两次。一个来自 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 事件
iBeacons - locationManager:didEnterRegion 回调和 UUID
仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标
CoreLocation startMonitoringRegion 未触发 didenterregion /didexitregion 代表