【问题标题】:Getting error about asking for location permission获取有关请求位置权限的错误
【发布时间】:2016-11-13 19:59:50
【问题描述】:

在请求位置权限时出现错误:“尝试在不提示位置授权的情况下启动 MapKit 位置更新。必须首先调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization]。”问题是我已经这样做了,并且在我为完全不同的东西添加了一个 url 方案之前它工作得很好。

这是在我的 ViewController 中:

override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.requestAlwaysAuthorization()
        self.locationManager.startUpdatingLocation()
        self.mapView.showsUserLocation = true
        //your loc
        mapView.delegate = self
        let initialLocation = CLLocation(latitude: 39, longitude: 77)
        centerMapOnLocation(initialLocation)
        }

【问题讨论】:

  • 错误是什么?为了帮助您,我们需要一些详细信息
  • requestAlwaysAuthorization() 向用户显示一个对话框,即使他们是世界上最快的用户,我认为他们无法在 startUpdatingLocation( ) 在下一行代码中执行。如果用户不授予权限怎么办?关于如何实现请求授权的教程和问题数以百万计,阅读它们,并不像您拥有的几行代码那么简单。

标签: ios swift permissions location mapkit


【解决方案1】:

您需要询问用户是否已授予跟踪其位置的权限:

if CLLocationManager.authorizationStatus() == .NotDetermined {
    manager.requestAlwaysAuthorization()
}

那么你需要一个回调函数,当权限被授予时会被调用:

func locationManager(manager: CLLocationManager,
                     didChangeAuthorizationStatus status: CLAuthorizationStatus)
{
    if status == .AuthorizedAlways || status == .AuthorizedWhenInUse {
        manager.startUpdatingLocation()
        // ...
    }
}

请记住,您必须异步执行此操作,因为您知道何时请求权限(例如,当视图控制器确实加载时),但您不知道用户何时会单击允许按钮。

并且不要忘记设置NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription,否则不会提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2018-01-14
    • 2018-12-21
    • 2017-09-13
    • 2016-12-06
    • 2015-12-07
    相关资源
    最近更新 更多