【问题标题】:Location services permission alert disappears位置服务权限警报消失
【发布时间】:2018-01-11 02:17:39
【问题描述】:

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

    ...
}

【问题讨论】:

  • 你是如何创建myLocation 的实例的(它应该被称为MyLocation)?它可能正在被释放,这意味着你的位置经理将被释放。
  • 我展示了我创建上述实例的两种方法。 var 的名称无关紧要,你可以调用你的 vars 任何东西。我同意它可能已发布,问题是我正在做你应该做的事情来保持引用(将 var 放在类级别)
  • 不是 var 的名称,而是类的名称。按照惯例,Swift 中的类以大写字母开头。显然,它仍然可以使用小写字母,但是使用大写字母可以帮助您(和其他人)知道您指的是一个类而不是一个变量。您还没有显示在哪里创建 myLocation 类的实例。您已经展示了如何创建位置管理器,但位置管理器是 myLocation 的属性,因此如果该类在函数中被实例化为局部变量,那么它将在函数退出后立即释放

标签: ios cllocationmanager


【解决方案1】:

解决这个问题的关键是我实例化这个类的 var 也是一个本地 var。我将它移到一个类 var 中,它不再消失。

例如:

class ViewController: UIViewController {
    let location = myLocation.init()

    override func viewDidLoad() {
        super.viewDidLoad()

        location.start()
    }
}

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2016-10-11
    • 1970-01-01
    • 2015-01-29
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多