У меня странная проблема, и я не могу решить ее ради своей жизни.
Я создаю приложение, которое отслеживает регионы в фоновом режиме, но, похоже, периодически не контролирует некоторые регионы
(Я установил разрешение на местоположение всегда и включил фоновые возможности определения местоположения).
Регионы, которые он отслеживает, работают нормально, поэтому, похоже, что-то связано с locationManager.startMonitoring(for: region)
приложение довольно простое, и каждый раз, когда регион добавляется или редактируется, оно:
- прекращает мониторинг всех регионов
- затем, если существует менее 20 регионов, начать мониторинг всех регионов
- в противном случае вычислите ближайшие 20 и начните следить за ними
вот код
let locationManager = CLLocationManager()
if(regionsArray.count <= 20{
//monitor all regions
monitorAllRegions()
}else{
//calculate closest 20 regions, and monitor them
//do some stuff here.....
}
func monitorAllRegions(){
//stop monitoring all regions
stopMonitoringAllRegions()
//start monitoring all regions in array
for region in regionsArray{
locationManager.startMonitoring(for: region)
}
//check all regions are monitored
print(regionsArray.count)
print(locationManager.monitoredRegions.count)
}
func stopMonitoringAllRegions() {
//stop monitoring all monitored regions
for region in locationManager.monitoredRegions {
locationManager.stopMonitoring(for: region)
}
}
после того, как все регионы отслеживаются, он печатает общее количество областей в массиве вместе с общим количеством отслеживаемых областей, просто чтобы убедиться, что все они были добавлены.
странно то, что примерно в 50% случаев количество отслеживаемых областей меньше, чем количество массивов регионов, поэтому он не отслеживает 1 или более регионов ??
Прежде всего я предположил, что была проблема с одним или несколькими регионами, но не всегда пропускаются одни и те же регионы (я проверил регионы в массиве по контролируемым регионам).
также, это не всегда происходит, например:
Я открываю регион 1, ничего не меняю, затем сохраняю ... количество равно
Затем я снова открываю регион 1, не внося изменений и сохраняю ... отслеживаемое число теперь меньше количества массивов?
еще одна странная вещь, если я устанавливаю точку останова на locationManager.startMonitoring (для: region), он работает абсолютно нормально, как будто замедление кода заставляет его работать как-то правильно?
но как только я отключаю БП и позволяю просто запустить код, он снова начинает не отслеживаемые местоположения
это ошибка или есть что-то глупое, что я пропускаю?
Я довольно новичок в быстром кодировании, и это моя первая попытка мониторинга региона, поэтому я немного озадачен
любая помощь будет принята с благодарностью