locationManager.startMonitoring (для: регион) ошибка? - PullRequest
0 голосов
/ 27 августа 2018

У меня странная проблема, и я не могу решить ее ради своей жизни.

Я создаю приложение, которое отслеживает регионы в фоновом режиме, но, похоже, периодически не контролирует некоторые регионы (Я установил разрешение на местоположение всегда и включил фоновые возможности определения местоположения).

Регионы, которые он отслеживает, работают нормально, поэтому, похоже, что-то связано с locationManager.startMonitoring(for: region)

приложение довольно простое, и каждый раз, когда регион добавляется или редактируется, оно:

  1. прекращает мониторинг всех регионов
  2. затем, если существует менее 20 регионов, начать мониторинг всех регионов
  3. в противном случае вычислите ближайшие 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), он работает абсолютно нормально, как будто замедление кода заставляет его работать как-то правильно? но как только я отключаю БП и позволяю просто запустить код, он снова начинает не отслеживаемые местоположения

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

любая помощь будет принята с благодарностью

...