我的身份验证请求方法存在以下问题:
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请求的行上放置了一个断点,并且正在调用方法。有趣的是,如果我将调用auth方法从它们各自的完成块移出,那么它工作正常,但出于我的目的,我需要在我的自定义警报被解除之前不调用它们。
有谁知道为什么我会看到这种行为/知道修复?
修改
我只是试图在主线程上调用发送,因为我有一个潜在的怀疑,这是一个线程问题,但唉,事实并非如此。
答案 0 :(得分:0)
我知道这是一个很老的问题,但是我较早就遇到了这个问题,想提出什么解决方法。
警报控制器绑定到位置管理器CLLocationManager
对象。如果您没有将对象放在身边,那么在用户点击它之前,auth警报控制器将不会显示或消失。
我不确定是否是上面的代码是否有问题,因为我不确定locationManager
的实际范围是什么,但这以类似的症状解决了我的问题。