didExitRegion вызывается только при входе в другой регион

Я работаю над приложением для iOS 7, которое указывает набор из 5 регионов вдоль маршрута и отправляет уведомление при входе в регион или выходе из него.
Регионы имеют круглую форму с радиусом 1 км и не являются смежными, а между ними расстояние в несколько километров. Примерно так (O — это круглая область, а - — пространство между ними):

O----O---O-------O---O-----O---O

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

2013-10-17 07:58:56 Entered region A
2013-10-17 08:10:05 Exited region A
2013-10-17 08:10:05 Entered region B
2013-10-17 08:26:15 Entered region C
2013-10-17 08:26:15 Exited region B
2013-10-17 08:51:52 Exited region C
2013-10-17 08:51:52 Entered region D
2013-10-17 09:19:04 Entered region E
2013-10-17 09:19:04 Exited region D

Обратите внимание, что все события выхода происходят в то же время, что и событие входа для следующего региона.
Я перечитал документацию API и заметил комментарий Only boundary crossings generate an event., но я думаю, что это все равно означает, что событие должно срабатывать прямо в момент выхода из региона.

Я использую CLLocationManager с точностью по умолчанию (kCLLocationAccuracyBest) и вызываю startMonitoringForRegion один раз для каждого региона, который я отслеживаю.

Кто-нибудь знает, следует ли ожидать поведения, которое я вижу, или я делаю что-то не так?


person René    schedule 17.10.2013    source источник


Ответы (1)


Ну, я исправил это, но я не знаю, что вызвало это.

У меня была вся логика мониторинга региона, включая методы CLLocationManagerDelegate, на одном контроллере представления. Я переместил все это в отдельный синглтон, ссылку на который я храню в своем AppDelegate и использую уведомления, чтобы позволить контроллеру представления обновлять представление, и теперь все работает нормально.

person René    schedule 17.10.2013