【问题标题】:IOS Swift User Location AuthorizationIOS Swift 用户位置授权
【发布时间】:2016-06-14 18:32:31
【问题描述】:

我有一个正在跟踪用户位置的应用。我对此有很多经验,并且在使用授权时请求了授权并将密钥添加到我的 P-List,但是我仍然收到此错误:

"尝试在不提示的情况下启动 MapKit 位置更新 位置授权。必须调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization] 首先。”

我使用的位置管理器不在ViewController 中,而是在另一个类中。

【问题讨论】:

    标签: ios objective-c swift cllocationmanager


    【解决方案1】:

    在设置 mapView.showsUserLocation = YES 或 startUpdatingLocation 之前检查 [CLLocationManager 授权状态] 确保您的 CLLocation 变量很强大。

    (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    
        if (status == kCLAuthorizationStatusAuthorizedWhenInUse) //or kCLAuthorizationStatusAuthorizedAlways
       {
            self.mapView.showsUserLocation = YES;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        }
    

    你必须使用任何人的授权

    self.locationManager.requestWhenInUseAuthorization(); or self.locationManager.requestAlwaysAuthorization();
    

    无论如何,用户接受权限后不会第二次出现警告

    【讨论】:

    • 我已经尝试注释掉“map view.showUserLocaton”,我得到了相同的结果,但是没有错误。应用程序仍然从不要求授权。
    • 您使用的是哪个版本的 iOS?你能粘贴一些你的代码sn-ps
    • 对不起,我忘记了如何在堆栈溢出中格式化我的代码。
    • 我已经实现了委托,应用甚至没有请求用户许可
    • 用户接受权限后不会第二次出现警告/错误
    【解决方案2】:

    从哪里调用这些方法并不重要,因此您可以从应用程序委托的 applicationDidFinishLaunching 方法(这些授权方法异步运行)或您的第一个方法中的 viewDidAppear 方法中调用其中任何一个方法视图控制器。

    【讨论】:

    • 我是从一个操作自定义类中调用它的,我也想这么多。当我明确请求用户授权时,我无法确定为什么仍然收到错误消息。
    • 尝试设置断点(或使用printNSLog)来确定首先调用哪个...您的授权方法或导致这些错误消息触发的 MapKit 方法。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2019-05-21
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多