OS X保存位置权限

时间:2016-03-16 11:49:15

标签: swift macos cocoa location cllocationmanager

我正在获取用户的GPS位置:

var manager:CLLocationManager!

override func viewDidLoad() {
    super.viewDidLoad()

    manager = CLLocationManager()
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.startUpdatingLocation()
    //manager.requestAlwaysAuthorization()
    //manager.requestWhenInUseAuthorization()

}

func locationManager(manager:CLLocationManager, didUpdateLocations locations:    [AnyObject]) { // Updated to current array syntax [AnyObject] rather than  AnyObject[]
    println("locations = \(locations)")
}

os x应用程序似乎不存在注释掉的函数。它仍然适用于我,所以没关系。

但每次我运行代码时都会要求获得使用位置的权限。 是否可以在某处存储权限,所以它只询问第一次执行?

1 个答案:

答案 0 :(得分:1)

引用Apple的documentation

  

调用authorizationStatus类方法获取应用的当前授权状态。

     

如果授权状态为kCLAuthorizationStatusRestrictedkCLAuthorizationStatusDenied,则您的应用不允许使用位置服务,您应该中止尝试使用它们。

OS X上的代码应如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    let status = CLLocationManager.authorizationStatus()
    if status == .Restricted || status == .Denied {
        // User permission not given
        return
    }

    manager = CLLocationManager()
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.startUpdatingLocation()
}

权限由Mac OS X集中管理。第一次调用startUpdatingLocation时,它会请求权限,然后记住用户已决定的内容。