我的基于 CoreLocation 的 Swift 应用未请求用户访问位置的许可

My CoreLocation based Swift app is not asking user's permission to access location

我正在构建一个基于 CoreLocation 的应用程序,它根据 纬度、经度、水平精度、海拔高度、垂直精度、行驶距离等 6 个参数向用户显示他们的位置.

它假设第一次请求用户允许访问位置,但我也尝试重置所有模拟器的设置。

灰色部分稍后用地图填充

这就是我的 View.Controller.swift 的样子:

//  Created by 16246 on 6/7/16.
//  Copyright © 2016 16246. All rights reserved.
//

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {
    private let LocationManager = CLLocationManager()
    private var previousPoint:CLLocation?
    private var totalMovementDistance:CLLocationDistance = 0

    @IBOutlet var latitudeLabel: UILabel!
    @IBOutlet var longitudeLabel: UILabel!
    @IBOutlet var horizontalAccuracy: UILabel!
    @IBOutlet var altitudeLabel: UILabel!
    @IBOutlet var verticalAccuracyLabel: UILabel!
    @IBOutlet var distanceTraveledLabel: UILabel!



    override func viewDidLoad() {
        super.viewDidLoad()
        LocationManager.delegate = self
        LocationManager.desiredAccuracy = kCLLocationAccuracyBest
        LocationManager.requestAlwaysAuthorization()


        // Do any additional setup after loading the view, typically from a nib.
    }

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        print("Authorization Status Changed to \(status.rawValue)")
        switch status {
        case .Authorized, .AuthorizedWhenInUse:
            LocationManager.startUpdatingLocation()
        default:
            LocationManager.stopUpdatingLocation()
        }
    }

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        let errorType = error.code == CLError.Denied.rawValue ? "Access Denied": "Error \(error.code)"
        let alertController = UIAlertController(title: "Location Manager Error", message: errorType, preferredStyle: .Alert)
        let okAction = UIAlertAction(title: "OK", style: .Cancel, handler: {action in})
        alertController.addAction(okAction)
        presentViewController(alertController, animated: true, completion: nil)
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let newLocation = (locations as [CLLocation]) [locations.count-1]

        let latitudeString = String(format: "%g\u{00B0}", newLocation.coordinate.latitude)
        latitudeLabel.text = latitudeString

        let longitudeString = String(format: "%g\u{00B0}", newLocation.coordinate.longitude)
        longitudeLabel.text = longitudeString

        let horizontalAccuracyString = String(format: "%g\u{00B0}", newLocation.horizontalAccuracy)
        horizontalAccuracy.text = horizontalAccuracyString

        let altitudeString = String(format: "%g\u{00B0}", newLocation.altitude)
        altitudeLabel.text = altitudeString

        let verticalAccuracyString = String(format: "%g\u{00B0}", newLocation.verticalAccuracy)
        verticalAccuracyLabel.text = verticalAccuracyString

        if newLocation.horizontalAccuracy < 0 {
            return
        }

        if newLocation.horizontalAccuracy > 100 ||
            newLocation.verticalAccuracy > 50 {
                return
        }

        if previousPoint == nil {
            totalMovementDistance = 0
        } else {
            totalMovementDistance += newLocation.distanceFromLocation(previousPoint!)
        }

        previousPoint = newLocation

        let distanceString = String(format: "%gm", totalMovementDistance)
        distanceTraveledLabel.text = distanceString

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

这是我的Info.plist文件:

这是我的模拟器:

我想要这样输出

自从过去 2 天以来,我一直被困在这个问题上。 Pint 啤酒给一个帮助我相处的极客。

LocationManager.requestAlwaysAuthorization() 移动到 viewDidAppear 方法。

编辑:

好的,你问的是 requestAlwaysAuthorization 但在 info.plist 中你设置了 When in usage... 键条目,所以将 requestAlwaysAuthorization 更改为 requestWhenInUseAuthorization