iOS:未调用CLLocationManager的didEnterRegion

Pau*_*ulG 5 objective-c uialertview cllocationmanager cllocation ios

我已成功设法注册一个区域或监控,我知道这是因为该didStartMonitoringForRegion方法被解雇了.

我有一个简单的测试应用程序,其中一个MKMapView我可以看到我当前的位置,我也将我的区域绘制在地图上作为一个红色圆圈,所以我实际上可以'物理'看到我进入或退出该区域的点.在didEnterRegiondidExitRegion方法我有一个UIAlertView火.

不久前,我决定离开办公室,带着我的iPhone 4散步,看看这是否有效.我开始在该地区的中间(半径约200米),我的应用程序一直在前景.我走了几个街区离开了这个地区,什么也没发生.

我读到SO(我认为)有时只有当你离开这个区域一定距离才有效,所以我继续走路.

又过了200米左右,我放弃了,因为UIAlertView静止不显示,然后开始往后走.显然,重新进入该地区后,didEnterRegion也没有开火.

我不是[locationManager startUpdatingLocation]在我的代码中调用任何地方,我应该吗?我只是真正创造了这个地区并致电[locationManager startMonitoringForRegion].

CLLocationManagerDelegate是我的应用程序代表,看起来很好,因为我didStartMonitoringForRegion正在解雇.

我错过了什么吗?

Nai*_*ler 2

该文档指出,区域监控独立于其他位置服务运行。这意味着调用 startMonitoringForRegion 就足够了。

确保:

  • [CLLocationManager regionMonitoringAvailable] 返回 YES
  • CLLocationManager.monitoredRegions 包含有效区域

注意: 文档指定事件需要 3-5 分钟才能触发。

在 iOS 6 中,半径在 1 到 400 米之间的区域在 iPhone 4S 或更高版本的设备上效果更好。(在 iOS 5 中,半径在 1 到 150 米之间的区域在 iPhone 4S 及更高版本的设备上效果更好。)在这些设备上,应用程序平均可以在 3 到 5 分钟内收到进入或退出相应区域的通知,如果不早点的话。

一旦设备距离之前的通知移动 500 米或更多,应用程序就会收到通知。通知的频率不应超过每五分钟一次。如果设备能够从网络检索数据,位置管理器就更有可能及时传递通知。

我希望这有帮助。