(有人提出类似的问题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
并且区域监视按预期工作。
任何想法?