2017-08-07 53 views
0

我想使用下面的代码来获取用户的当前位置,但它不起作用。我已将NSLocationWhenInUseUsageDescription密钥和NSLocationAlwaysUsageDescription密钥添加到我的Info.plist文件中。 下面是代码如何获取用户位置? [macOS]

var locationManager = CLLocationManager(); 

override func viewDidLoad() { 
     super.viewDidLoad() 
     startReceivingLocationChanges(); 

    } 
func startReceivingLocationChanges() { 
    let authorizationStatus = CLLocationManager.authorizationStatus() 
      if authorizationStatus != .authorizedAlways { 
       // User has not authorized access to location information. 
       print("not authorized"); 
       return 
      } 

     if !CLLocationManager.locationServicesEnabled() { 
      print("not enabled"); 
      return 
     } 

     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
     locationManager.distanceFilter = 100.0 // In meters. 

     locationManager.startUpdatingLocation() 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let lastLocation = locations.last! 
     print(lastLocation) 
    } 

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
     print(error); 
    } 

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
     print("inside didChangeAuthorization "); 
    } 

我已经通过了苹果的文档阅读及以上,苹果建议的代码。我在这里错过了什么?任何形式的帮助真的很感激。谢谢

编辑 由于某种原因requestAlwaysAuthorization()不可用。看下面的截图 enter image description here

回答

0

只要确保位置管理员有权查找用户的位置。在呼叫位置更新之前,您应该致电locationManager.requestAlwaysAuthorization()

还要检查您的模拟器调试是否模拟用户位置。

+0

醒来。有没有这样的事情称为模拟器或模拟器的macOS。 –

+0

@nomadoda检查我的编辑。请求授权不可用。 – sumesh

2

由于某种原因requestAlwaysAuthorization()不可用。

requestAlwaysAuthorization()不可用,因为你在MacOS上工作,并the documentation表明,该方法只适用于iOS和watchOS可用。见SDK的列表页面的右侧,靠近顶部:

list of SDKs