在Swift中的startMonitoringForRegion之后的RequestStateForRegion

Han*_*ber 2 cllocationmanager swift2

当我开始监视像这样的地区时

locationManager.startMonitoringForRegion(tGeoFence[wert][wert2])
Run Code Online (Sandbox Code Playgroud)

并尝试确定它是否已经在此之后输入:

for region in locationManager.monitoredRegions {
    if let cireg = region as? CLCircularRegion {
        if cireg.identifier == tGeoFence[wert][wert2].identifier {
            locationManager.requestStateForRegion(cireg)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不起作用,导致在执行代码的第二部分时未完成区域的注册.延迟该部分的执行似乎很难看(确定并不总是被调用),有没有更好的方法来解决这个问题?

Han*_*ber 5

发现,显然didStartMonitoringForRegion委托函数是请求requestStateForRegion的正确位置:

func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
    locationManager.requestStateForRegion(region)   
}
Run Code Online (Sandbox Code Playgroud)

编辑:可怕的是,我仍然需要一个短暂的延迟或有时不会调用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)
    }
}
Run Code Online (Sandbox Code Playgroud)

:(