当我开始监视像

locationManager.startMonitoringForRegion(tGeoFence[wert][wert2])

并尝试确定是否已经输入,如下所示:
for region in locationManager.monitoredRegions {
    if let cireg = region as? CLCircularRegion {
        if cireg.identifier == tGeoFence[wert][wert2].identifier {
            locationManager.requestStateForRegion(cireg)
        }
    }
}

不起作用,导致在执行代码的第二部分时该区域的注册未完成。延迟执行该部分似乎很难看(diddeterminestate not always called),是否有更好的方法来解决此问题?

最佳答案

发现,很明显 didStartMonitoringForRegion 委托(delegate)函数是要求 requestStateForRegion 的正确位置:

func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
    locationManager.requestStateForRegion(region)
}

编辑:糟糕的是,我仍然需要短暂的延迟,或者有时 requestStateForRegion 不被调用:
func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
        self.locationManager.requestStateForRegion(region)
    }
}

:(

关于swift2 - Swift中startMonitoringForRegion之后的RequestStateForRegion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33287196/

10-13 04:07