在块中调用时未发出 CLLocationManager 身份验证请求

Posted

技术标签:

【中文标题】在块中调用时未发出 CLLocationManager 身份验证请求【英文标题】:CLLocationManager auth request not made when invoked in block 【发布时间】:2016-12-13 08:46:56 【问题描述】:

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

    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 方法的调用移出它们各自的完成块,那么它可以正常工作,但出于我的目的,我需要在我的自定义警报被解除之前不要调用它们。

有人知道我为什么会看到这种行为/知道解决方法吗?

编辑:

我只是尝试在主线程上调用 dispatch,因为我偷偷怀疑这是线程问题,但可惜不是。

【问题讨论】:

更新截图 什么?有什么不明白的截图吗? 【参考方案1】:

我知道这是一个很老的问题,但我之前遇到过这个问题,想建议为我解决这个问题的方法。

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

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

【讨论】:

以上是关于在块中调用时未发出 CLLocationManager 身份验证请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在块中调用 link_to 辅助方法,在使用类的同时链接到图像文件?

如何使用 File#flock 对独占锁发出非阻塞请求?

AFJSONRequestOperation:变量“操作”在被块捕获时未初始化

在块中复制和自动释放本地变量

ALAssetLibraryGroup 在块中找到相机胶卷

有人可以解释 Ruby 在块中使用管道字符吗?