我正在向CLLocationManager请求requestWhenInUseAuthorization,用户提示显示,但随后迅速消失。
根据SO上的其他帖子,它说您必须在类级别声明CLLocationManager var才能解决此问题。问题是我已经在这样做了,而且这种情况仍然发生。
任何帮助将不胜感激。
class myLocation: CLLocationManagerDelegate {
var locationManager:CLLocationManager?
// Have also tried it as: let locationManager = CLLocationManager()
func start() {
if CLLocationManager.locationServicesEnabled() {
self.locationManager = CLLocationManager()
guard let manager = self.locationManager else {
print("Error creating Location Manager")
return
}
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
manager.requestWhenInUseAuthorization()
}
else {
print("Location Services Disabled")
}
}
//Delegate Methods
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .authorizedAlways, .authorizedWhenInUse:
manager.startUpdatingLocation()
default:
manager.requestWhenInUseAuthorization()
}
}
...
}
解决此问题的关键是我实例化该类的 var 也是一个本地变量。我将其移动到类变量中,它不再消失。
所以例如:
class ViewController: UIViewController {
let location = myLocation.init()
override func viewDidLoad() {
super.viewDidLoad()
location.start()
}
}