Ios 我的基于CoreLocation的Swift应用程序没有询问用户';s访问该位置的权限

Ios 我的基于CoreLocation的Swift应用程序没有询问用户';s访问该位置的权限,ios,xcode,swift,core-location,osx-elcapitan,Ios,Xcode,Swift,Core Location,Osx Elcapitan,我正在构建一个基于CoreLocation的应用程序,它根据纬度、经度、水平精度、高度、垂直精度、行驶距离等6个参数向用户显示他们的位置 它假设在第一时间请求用户允许访问该位置,但我也尝试过重置所有模拟器的设置 灰色部分稍后将用地图填充 这就是我的View.Controller.swift的外观: // Created by 16246 on 6/7/16. // Copyright © 2016 16246. All rights reserved. // import UIKit i

我正在构建一个基于
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.
    }


}
//由16246于2016年6月7日创建。
//版权所有©2016 16246。版权所有。
//
导入UIKit
导入核心定位
类ViewController:UIViewController、CLLocationManagerDelegate{
私有let LocationManager=CLLocationManager()
private var previousPoint:CLLocation?
私有变量totalMovementDistance:CLLocationDistance=0
@IBOUTLE var latitudeLabel:UILabel!
@IBVAR longitudeLabel:UILabel!
@IBVAR水平精度:UILabel!
@IBOutlet var altitudeLabel:UILabel!
@IBOutlet var verticalAccuracyLabel:UILabel!
@IBOutlet var distanceTraveledLabel:UILabel!
重写func viewDidLoad(){
super.viewDidLoad()
LocationManager.delegate=self
LocationManager.desiredAccuracy=KCallocationAccuracyBest
LocationManager.requestAlwaysAuthorization()
//加载视图后,通常从nib执行任何其他设置。
}
func locationManager(经理:CLLocationManager,didChangeAuthorizationStatus:CLAuthorizationStatus){
打印(“授权状态更改为\(Status.rawValue)”)
开关状态{
案例.授权、.授权使用:
LocationManager.startUpdatingLocation()
违约:
LocationManager.StopUpdatengLocation()
}
}
func locationManager(管理器:CLLocationManager,错误:N错误){
让errorType=error.code==cleror.Denied.rawValue?“拒绝访问”:“error\(error.code)”
让alertController=UIAlertController(标题:“位置管理器错误”,消息:errorType,preferredStyle:.Alert)
让okAction=UIAlertAction(标题:“确定”,样式:。取消,处理程序:{action in})
alertController.addAction(okAction)
presentViewController(alertController,动画:true,完成:nil)
}
func locationManager(管理器:CLLocationManager,didUpdateLocations位置:[CLLocation]){
让newLocation=(位置为[CLLocation])[locations.count-1]
让latitudeString=String(格式:“%g\u{00B0}”,newLocation.coordinate.latitude)
latitudeLabel.text=latitudeString
让longitudeString=String(格式:“%g\u{00B0}”,newLocation.coordinate.longitude)
longitudeLabel.text=longitudeString
让horizontalAccuracyString=字符串(格式:“%g\u{00B0}”,newLocation.horizontalAccuracyString)
horizontalAccuracy.text=horizontalAccuracyString
让altitudeString=String(格式:“%g\u{00B0}”,newLocation.altime)
altitudeLabel.text=高度限制
让verticalAccuracyString=String(格式:“%g\u{00B0}”,newLocation.verticalAccuracy)
verticalAccuracyLabel.text=verticalAccuracyString
如果newLocation.HorizontalAccurance<0{
返回
}
如果newLocation.HorizontalAccurance>100||
newLocation.verticalAccuracy>50{
返回
}
如果上一点==nil{
totalMovementDistance=0
}否则{
totalMovementDistance+=newLocation.distanceFromLocation(上一个点!)
}
previousPoint=新位置
let distancesting=字符串(格式:“%gm”,totalMovementDistance)
distanceTraveledLabel.text=距离
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
}
这是我的Info.plist文件:

这是我的模拟器

我希望输出像这样:


从过去的两天起,我就一直被困在这个问题上。给一个帮我解决这个问题的极客一品脱啤酒

LocationManager.requestAlwaysAuthorization()
移动到
viewdide
方法

编辑:


好的,您要求的是
requestAlwaysAuthorization
,但在info.plist中,您设置了
使用时…
键输入,因此,将
requestAlwaysAuthorization
更改为
requestwhenuseauthorization

检查您的应用程序设置,并确保位置权限尚未获得批准/拒绝我从未出现过允许/拒绝位置服务的弹出窗口。我已经重置了模拟器100秒的时间,并尝试运行,但仍然无法看到弹出窗口@Paulw11I在我的View.Controller.swift中没有viewdidappease方法。虽然我尝试了这个方法,但没有任何区别
覆盖func viewdidappease(动画:Bool){LocationManager.requestAlwaysAuthorization()}
确定,您正在请求
requestAlwaysAuthorization
但在info.plist中,您设置了
使用时…
键条目,因此将
requestAlwaysAuthorization
更改为
requestwhenuseauthorization
…非常感谢。成功了。我欠你一品脱啤酒,伙计。谢谢