Прежде всего вы должны добавить следующий метод делегата менеджера расположений и посмотреть, не удалось ли по какой-либо причине зарегистрировать мониторинг региона:
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
NSLog(@"%@",error);
}
Во-вторых, мониторинг региона является системным общим ресурсом.
В документации говорится, что она позволяет контролировать ограниченное количество регионов (к сожалению, не указывать никакого числа), и упоминается, что, если другое приложение зарегистрирует дополнительные регионы для мониторинга, некоторые из областей, отслеживаемых вашими приложениями, могут быть отброшены.
В-третьих, для мониторинга региона не используется технология GPS. Он использует только сотовую антенну вашего оператора сети и всякий раз, когда вы меняете вышку сотовой связи, он запускает системное событие, которое проходит по всем отслеживаемым регионам и проверяет, находится ли регион в новой области, в которой вы сейчас находитесь.
Это означает, что вам следует ожидать меньшей точности в обслуживании, и, следовательно, вам следует увеличить радиус, который вы устанавливаете для региона.
Наконец, если ваше приложение полностью завершено и НЕ приостановлено, ваше приложение получит делегат приложения внутри:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
a UIApplicationLaunchOptionsLocationKey
в словаре launchOptions
.
Тогда вы обязаны повторно инициализировать свой менеджер местоположений, получить текущее местоположение и запустить локальное push-уведомление для пользователя в течение ограниченного времени, в течение которого ваше приложение работает.
Поскольку приложение не будет нормально работать на этом этапе, но в состоянии ограниченного фонового режима.
Также, если вы хотите протестировать приложение в симуляторе, вы должны добавить файл track.gpx в ваш проект и установить симулятор в режим отслеживания.
Убедитесь, что 2 местоположения, которые вы поместили в симуляторе, не очень далеки (так как отслеживание может занять довольно много времени) и задайте их в пути, где он войдет в ваш контролируемый регион.
Тогда посмотрите, если вы получите какие-либо обратные вызовы.
Не проверяйте его на своем устройстве, так как вам нужно пройти несколько блоков, чтобы увидеть реальное взаимодействие с устройством: -)