iOS:CLLocationManager未调用didEnterRegion

时间:2013-04-22 17:11:50

标签: ios objective-c uialertview cllocationmanager cllocation

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

我有一个简单的测试应用程序,其中一个MKMapView我可以看到我当前的位置,我也将我的区域在地图上绘制成一个红色圆圈,这样我实际上可以“物理地”看到我在哪个位置进入或离开该地区。在didEnterRegiondidExitRegion方法中,我发布了UIAlertView

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

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

又过了200米左右,我放弃了UIAlertView仍未显示,然后开始往后走。显然,在重新进入该地区后,didEnterRegion也没有开火。

我不是在我的代码中的任何地方调用[locationManager startUpdatingLocation],我应该吗?我只是在创建区域并调用[locationManager startMonitoringForRegion]

CLLocationManagerDelegate是我的应用代表,看起来很正常,因为我的didStartMonitoringForRegion正在正常启动。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

文档说明区域监控独立于其他位置服务。这意味着它应该足以调用startMonitoringForRegion。

确保:

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

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

  

在iOS 6中,半径在1到400米之间的区域效果更好   在iPhone 4S或更高版本的设备上。 (在iOS 5中,具有半径的区域   在iPhone 4S和更高版本的设备上,1到150米之间的效果会更好。)   在这些设备上,应用程序可以期望接收适当的区域   在3到5分钟内输入或区域退出通知   平均,如果不是更快。

  

只要设备移动500米,应用就会收到通知   或者更多来自之前的通知。不应该期待   通知频率高于每五分钟一次。如果   设备能够从网络中检索位置管理器的数据   更有可能及时发送通知。

我希望这会有所帮助。

答案 1 :(得分:0)

要注意的一件事(如果您正在模拟位置):

如果您认为自己已完成代码中的所有操作,则从未调用进入和退出,请务必通过以下方式检查是否禁用了位置模拟:

进入项目计划 - >编辑方案 - >禁用位置模拟。

我试图在模拟位置的同时通过身体走出和在该地区测试我的区域监控,并且由于这个原因它不适合我。