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 в значительной степени влияет на точность мониторинга региона. Я выключил это. Это объясняет, почему я чувствовал, что мой код работает так же случайно, как дует ветер. Ну, я надеюсь, что это было так. Я получаю последовательные тесты на симуляторе. Я надеюсь, что настоящий тест по дороге домой покажет, что я прав.