iOS Geofencing didDetermineState forRegion - это CLRegionStateInside для всех регионов

Я постараюсь выразить этот вопрос только с соответствующими деталями.

Я работаю над геозоной для приложения, которое утверждает, что устройство находится в нескольких регионах одновременно. Раньше гео-фреймворк работал как шарм, но потом мне нужно было добавить дополнительный код, который не должен мешать этому.

Я делаю некоторые тесты в симуляторе и в реальной жизни. Поскольку я позволил ему отслеживать регионы на основе последнего местоположения и прекратил получать события 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 для каждого. Как это возможно? Ни один из этих регионов не находится друг над другом. Я рисую регионы в виде кругов (это CLCircularRegions) на виде карты.

На симуляторе я могу имитировать местоположения, когда я "переезжаю" далеко от моих регионов, я получаю didExitRegion для каждого. И когда я вернусь к ним, я получу didEnterRegion во всех наблюдаемых в настоящее время регионах. Это в основном, как регионы огромны и перекрываются. Но это не так. Кроме того, раньше он прекрасно работал с получением didEnter/ExitRegion.

Я перепробовал много вещей, включая удаление нового кода, и он все еще ведет себя так.

С чего бы это думать, что я нахожусь в нескольких регионах одновременно?

2 ответа

Лучше попробуй проверить в реальном устройстве, чем на симуляторе. didEnter/ExitRegion имеет ошибки точности 100 метров

Я понял. Оказывается, что включение WiFi в значительной степени влияет на точность мониторинга региона. Я выключил это. Это объясняет, почему я чувствовал, что мой код работает так же случайно, как дует ветер. Ну, я надеюсь, что это было так. Я получаю последовательные тесты на симуляторе. Я надеюсь, что настоящий тест по дороге домой покажет, что я прав.

Другие вопросы по тегам