iOS Geofencing didDetermineState forRegion是所有区域的CLRegionStateInside

时间:2015-05-05 08:09:22

标签: ios geofencing

我会尝试用相关细节来表达这个问题。

我正在为一个应用程序开发一些地理围栏,声称该设备同时位于多个区域内。 我曾经把地理围栏的工作看作魅力,但后来不得不添加一些额外的代码,这真的不应该干扰它。

我正在模拟器和现实生活中进行一些测试。 当我让它根据最新位置监视区域并停止接收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。

我尝试了很多东西,包括删除新代码,它仍然以这种方式运行。

为什么我认为我一次在几个地区?

2 个答案:

答案 0 :(得分:0)

您最好尝试检查Real设备然后模拟器。 didEnter / ExitRegion有100米准确度错误

答案 1 :(得分:0)

我明白了。事实证明,WiFi正在大大影响区域监控的准确性。我关掉了它。这就解释了为什么我觉得我的代码随着风的吹拂而随机工作。好吧,我希望就是这样。我在模拟器上得到了一致的测试。我希望对回家的真正考验能证明我是对的。