我会尝试用相关细节来表达这个问题。
我正在为一个应用程序开发一些地理围栏,声称该设备同时位于多个区域内。 我曾经把地理围栏的工作看作魅力,但后来不得不添加一些额外的代码,这真的不应该干扰它。
我正在模拟器和现实生活中进行一些测试。 当我让它根据最新位置监视区域并停止接收didEnter / ExitRegion事件时,我决定在区域开始被监视时请求state 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。怎么可能?这些区域都不是彼此重叠的。我在mapview上绘制了区域(它们是CLCircularRegions)。
在模拟器上,我可以模拟当我“移动”远离我的区域时的位置我在每一个上都得到了didExitRegion。当我回到他们附近时,我将在所有当前监控的区域收到didEnterRegion。这基本上就像地区巨大且重叠。但他们不是。此外,它曾经用于获得didEnter / ExitRegion。
我尝试了很多东西,包括删除新代码,它仍然以这种方式运行。
为什么我认为我一次在几个地区?
答案 0 :(得分:0)
您最好尝试检查Real设备然后模拟器。 didEnter / ExitRegion有100米准确度错误
答案 1 :(得分:0)
我明白了。事实证明,WiFi正在大大影响区域监控的准确性。我关掉了它。这就解释了为什么我觉得我的代码随着风的吹拂而随机工作。好吧,我希望就是这样。我在模拟器上得到了一致的测试。我希望对回家的真正考验能证明我是对的。