无法使用 stopUpdatingLocation 和 stopRelativeAltitudeUpdates 停止更新

Cannot stop Updates with stopUpdatingLocation and stopRelativeAltitudeUpdates

我正在为 watchOS 构建一个滑翔伞应用程序,它可以显示和记录高度、速度、滑翔比等值。

到目前为止,我构建了 UI,集成了一些设置,并且我正在接收压力传感器数据和 GPS 位置。 为了节省电池寿命,我添加了一个触发 locationManager.stopUpdatingLocation 和 CMAltimeter.stopRelativeAltitudeUpdates 功能的“停止按钮”。但是在控制台中,我仍然可以看到位置和高度更新。

我把代码上传到 https://github.com/LukeCrouch/iAlti/tree/main/iAlti%20WatchKit%20Extension 。 有意思的文件大概是ControlsView,这里我声明并调用了相关的函数。

    func stopLocation() {
        self.locationManager.stopUpdatingLocation()
    }

非常感谢能得到的每一点帮助,这是我第一次编写应用程序! :)

干杯卢克

问题出在这一行:

@ObservedObject var locationManager = LocationManager()

每次重新生成 ControlsView 时,该行都会重新运行。所以 LocationManager 是一个不同的 LocationManager。因此,您要告诉 LocationManager 的 CLLocationManager 停止更新,但这是一个 与开始的 CLLocationManager 不同的

相反,将其设为单例环境对象,以便您的应用只有 一个 LocationManager 和 one CLLocationManager。这样,每次与它交谈时,您都在与同一个人交谈。