问题描述
在应用中请求定位来获取当前位置的信息,如果用户拒绝了定位,那么需要通过UIAlertController弹出调到系统设置界面来进行授权定位。
代码如下:
if !CLLocationManager.locationServicesEnabled() || CLLocationManager.authorizationStatus() == .denied {
let alertController = UIAlertController(title: "定位权限被拒绝", message: "请到设置中允许定位", preferredStyle: .alert)
let setAction = UIAlertAction(title: "设置", style: .default, handler: { (action) in
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
})
let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
alertController.addAction(cancelAction)
alertController.addAction(setAction)
present(alertController, animated: true, completion: nil)
return
}
在打开系统设置界面的时候,控制台打印了错误信息:
_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
解决办法
目前的解决办法是,使用多线程来调用:
DispatchQueue.main.async {
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
}
网友评论