0

我的身份验证请求方法存在一些问题,如下所示:

    func requestAuthorisation() {
        if CLLocationManager.authorizationStatus() == .NotDetermined {
            let locationPermissionRequest = UIAlertController.init(title: "Location services", message:  "Some message, hidden for obvious reasons...", preferredStyle: .Alert)
            let alwaysOnButton = UIAlertAction.init(title: "Always on (recommended)", style: .Default, handler: { (alert: UIAlertAction!) in
                locationPermissionRequest.dismissViewControllerAnimated(true, completion: {
                    self.locationManager.requestAlwaysAuthorization()
                })
            })
            let backgroundButton = UIAlertAction.init(title: "On when in use", style: .Default, handler: { (alert: UIAlertAction!) in
                locationPermissionRequest.dismissViewControllerAnimated(true, completion: {
                    self.locationManager.requestWhenInUseAuthorization()
                })
            })
            let noButton = UIAlertAction.init(title: "Off", style: .Destructive, handler: { (alert: UIAlertAction!) in
                locationPermissionRequest.dismissViewControllerAnimated(true, completion: nil)
            })
            locationPermissionRequest.addActions(withActions: [alwaysOnButton, backgroundButton, noButton])
            locationPermissionRequest.present(true, completion: nil)
        }
    }

这里的问题是,当我点击“使用时”按钮或“始终”按钮时,会调用它们的操作并解除警报,但从不请求位置验证。我在发出身份验证请求和调用方法的行上放置了一个断点。有趣的是,如果我将对 auth 方法的调用移出它们各自的完成块,那么它工作正常,但出于我的目的,我需要在我的自定义警报被解除之前不要调用它们。

有谁知道为什么我会看到这种行为/知道修复?

编辑:

我只是尝试在主线程上调用调度,因为我偷偷怀疑这是一个线程问题,但唉,事实并非如此。

4

1 回答 1

0

我知道这是一个相当老的问题,但我早些时候遇到了这个问题,并想建议什么为我解决了这个问题。

警报控制器绑定到位置管理器CLLocationManager对象。如果您没有保留该对象,则身份验证警报控制器将在用户点击它之前不会显示或消失。

我不确定那是/是您是否对上面的代码有问题,因为我不确定locationManager真正的范围是什么,但这解决了我的类似症状的问题。

于 2018-08-01T15:35:34.503 回答