locationManager.startMonitoring(针对:区域)错误?

时间:2018-08-27 09:28:59

标签: swift location locationmanager

我有一个奇怪的问题,我无法终生解决。

我正在创建一个在后台监视区域的应用程序,但是似乎间歇性地不监视某些区域 (我已将位置权限设置为始终,并启用了后台位置功能。)

它确实监视的区域工作正常,因此似乎与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(for:region)上设置了一个断点,它的工作原理就很好,好像放慢代码的速度使其可以正常工作? 但是一旦我禁用BP并让代码开始运行,它就会再次开始不受监视的位置

这是一个错误,还是我缺少了一些愚蠢的东西? 我是快速编码的新手,这是我第一次尝试区域监视,因此我有些困惑

任何帮助将不胜感激

0 个答案:

没有答案