我会试着用相关的细节来表达这个问题。
我正在为一个声称设备同时位于几个区域内的应用程序做一些地理围栏工作。我曾经让地理围栏像一个护身符一样工作,但后来不得不添加一些额外的代码,这真的不应该干扰它。
我正在模拟器和现实生活中做一些测试。因为我让它根据最新的位置监控区域,并停止接收didEnter/ExitRegion事件,所以当一个区域开始被监控时,我决定使用requestState forRegion。如下所示:
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region{
NSLog(@"didStartMonitoringForRegion: %@" ,region.identifier);
[manager requestStateForRegion:region];
}
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{
switch (state) {
case CLRegionStateUnknown:
[self.delegate writeToConsole:[NSString stringWithFormat:@"CLRegionStateUnknown %@", region.identifier ]];
break;
case CLRegionStateOutside:
[self.delegate writeToConsole:[NSString stringWithFormat:@"CLRegionStateOutside %@", region.identifier ]];
break;
case CLRegionStateInside:
[self.delegate writeToConsole:[NSString stringWithFormat:@"CLRegionStateInside %@", region.identifier ]];
break;
default:
break;
}
}这给了我每一个的CLRegionStateInside。那件事怎么可能?这些区域都不是一个接一个的。我在地图视图上将区域绘制为圆形(它们是CLCircularRegions)。
在模拟器上,我可以模拟位置,当我“移动”远离我的区域时,我在每个区域上都会得到didExitRegion。当我回到他们附近时,我会收到所有当前监控区域的didEnterRegion。这基本上就像是区域是巨大的和重叠的。但事实并非如此。此外,它过去在获取didEnter/ExitRegion时工作得很好。
我尝试了很多方法,包括删除新代码,但它仍然以这种方式运行。
为什么它会认为我同时在几个地区?
发布于 2015-05-05 18:00:10
你最好试着检入真实设备而不是模拟器。didEnter/ExitRegion有100米精度错误
发布于 2015-05-05 19:10:26
我想通了。事实证明,WiFi的开启对区域监测的准确性有很大影响。我把它关掉了。这就解释了为什么我觉得我的代码像风一样随意地工作。我希望就是这样。我在模拟器上得到了一致的测试。我希望在回家的路上真正的测试能证明我是对的。
https://stackoverflow.com/questions/30047465
复制相似问题