区域监测仅适用于第二次发射

时间:2017-03-23 12:29:35

标签: ios swift cllocationmanager

(有人提出类似的问题here,但情况 - 或者至少我提供的信息 - 在我的情况下是不同的)

我使用以下代码检查用户是否已位于区域内

var m_location_manager = CLLocationManager()

override func viewDidLoad() {
        // .. 
        m_location_manager.delegate = self
        m_location_manager.requestAlwaysAuthorization()
        m_location_manager.desiredAccuracy = kCLLocationAccuracyBest
        m_location_manager.startUpdatingLocation()
        let region = CLCircularRegion( ... ) 
        m_location_manager.startMonitoringForRegion(region)
    }

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

func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
    let circular_region = region as! CLCircularRegion
    if circular_region.containsCoordinate((m_location_manager.location?.coordinate)!) {
        // do something .. 
    }
}

我正在测试当前的模拟器(Xcode 7.3)。代码工作正常,但当我重置模拟器并重新启动它时,它第一次无法正常工作。这是当我第一次被问到是否要为我的应用程序提供必要的权限时,在我看来,即使我接受,也不会在下次应用程序启动时授予权限。这段代码:

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        if status == CLAuthorizationStatus.AuthorizedAlways {
            print(true)
        } else {
            print(false)
        }
    }  

当在'新鲜'模拟器会话上运行时,我首先得到false,一旦我在警报窗口点击'允许',请求获得许可我得到true。 (请注意,即使我在true子句中移动区域监视的代码片段,也没有任何反应。)以后所有时间我都会直接获得true并且区域监视按预期工作。

任何想法?

0 个答案:

没有答案