CLLocationManager requestWhenInUseAuthorization()不起作用

我正在尝试在我的iOS应用程序中使用位置服务但由于某种原因requestWhenInUseAuthorization无法使用时。 当用户第一次使用该应用程序时,提示按正常方式询问权限,但是当您第二次打开应用程序时,由于某种原因,未调用didChangeAuthorizationStatus方法,因此我无法在地图上显示用户当前位置。

我的代码如下:

  override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib locationManager.delegate = self locationManager.requestWhenInUseAuthorization() var config:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() config.URLCache = NSURLCache(memoryCapacity: 2 * 1024 * 1024, diskCapacity: 10 * 1024 * 1024, diskPath: "MarkerData") markerSession = NSURLSession(configuration: config) } func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { if status == .AuthorizedWhenInUse { locationManager.startUpdatingLocation() mapView.delegate = self mapView.myLocationEnabled = true mapView.settings.myLocationButton = true } } 

首先,您需要在info.plist文件中添加NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription (如果要在后台使用)。 见下图:

在此处输入图像描述

接下来,在swift文件中,您需要在viewDidLoad()方法中调用locationManager.requestWhenInUseAuthorization()locationManager.requestAlwaysAuthorization()

最后,您可以在locationManager委托方法中执行mapView.camera = GMSCameraPosition(target: locations.last!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)

示例代码:

 class ViewController: UIViewController, CLLocationManagerDelegate { var locationManager = CLLocationManager(); override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var camera = GMSCameraPosition.cameraWithLatitude(-33.86, longitude: 151.20, zoom: 6) var mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) mapView.myLocationEnabled = true self.view = mapView locationManager.delegate = self locationManager.distanceFilter = kCLDistanceFilterNone locationManager.desiredAccuracy = kCLLocationAccuracyBest if #available(iOS 8.0, *) { print("iOS >= 8.0.0") locationManager.requestAlwaysAuthorization() } locationManager.startUpdatingLocation() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { println(locations.last) var mapView = self.view as! GMSMapView mapView.camera = GMSCameraPosition(target: locations.last!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) } } 

您可以发布此post ,了解有关iOS 8中LocationManager更改的更多详细信息。