定位服务权限警报消失



我正在向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()
    }
}

最新更新