在块中调用时未发出 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 辅助方法,在使用类的同时链接到图像文件?