我有一个奇怪的问题,我无法终生解决。
我正在创建一个在后台监视区域的应用程序,但是似乎间歇性地不监视某些区域 (我已将位置权限设置为始终,并启用了后台位置功能。)
它确实监视的区域工作正常,因此似乎与locationManager.startMonitoring(for: region)
该应用程序非常简单,每次添加或编辑区域时,它都会:
这是代码
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并让代码开始运行,它就会再次开始不受监视的位置
这是一个错误,还是我缺少了一些愚蠢的东西? 我是快速编码的新手,这是我第一次尝试区域监视,因此我有些困惑
任何帮助将不胜感激