【问题标题】:WatchKit (watchOS 2) CLLocationManager returning nil coordinatesWatchKit (watchOS 2) CLLocationManager 返回零坐标
【发布时间】:2015-10-25 05:52:24
【问题描述】:

我可以说我不知道​​这是如何/为什么发生的。

我正在开发一个 watchOS 2 应用程序。我整天都在研究它,它使用核心位置。它一直在获取当前位置就好了。我需要纬度/经度才能进行将这些作为参数的网络调用。

无论如何,我在进行现场测试时发现我的应用程序崩溃了。它一遍又一遍地在我的手表上崩溃。

回家调试,我注意到 URL 的坐标值为零。奇怪的是,它连续几个月每天都在工作。我没有对核心位置代码进行任何更改。

我正在使用

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])

为了检测何时进行网络调用。只有当我有这些坐标时,我才能进行网络调用。我查看locations 参数以查看它是否大于0,然后我得到其中最后一个对象的纬度/经度。我还检查了我正在运行的locationManager 实例中的值。

无论如何,这些值是nil!如果函数 locationManager:didUpdateWithLocations: 被调用,这些值怎么可能为零?

我很困惑,因为它只是发生在现场测试的中间。当我出去的时候它整天都在工作,然后它就停止了。我的 Apple Watch 上的地图应用程序等其他应用程序运行正常。此外,所有位置权限均已启用。我什至删除了我的 iOS 设备和手表上的应用程序,开始使用新的应用程序。那并没有解决问题。

我只是在从网络服务器获得成功响应后才调用该函数来停止更新位置,只有当我从核心位置获得纬度/经度的合法值时才会启动。

有什么想法吗?

【问题讨论】:

    标签: swift core-location watchkit apple-watch watchos-2


    【解决方案1】:

    在 watchOS 1 中,手表应用需要询问手机应用来确定位置。

    使用 watchOS 2,手表应用可以调用一次requestLocationThis other answer 解释它。

    【讨论】:

    • 我明白了。但是 Xcode 允许我使用 CLLocationManager 编写相同的代码来获取当前位置,就像在 iOS 项目中一样。它不会警告我手表没有内置 GPS。此外,它会不时抓取位置。当我测试 Watch App 时,我在控制台中看到了坐标打印输出。这让我觉得我应该能够从 Watch 请求位置。也许它会帮我从 iPhone 上进行通信?
    • 是的,这正是我所遵循的。它抓取一个位置(这是完美的),但它会停止更新位置,或者如果我去其他地方它不会更新。它要么报告零,要么保持与以前相同。
    【解决方案2】:

    我遇到了同样的问题,因为我在我的 ExtensionDelegate 中实现了 CLLocationManagerDelegateWKInterfaceController 中的相同实现效果非常好。

    【讨论】:

    • 如果我们希望我们的位置管理器独立于 UI 怎么办?
    • 嗯,看来我可以只使用另一个 NSObject 作为 CLLocationManager 并将其作为 ExtensionDelegate 的属性。
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 2016-12-20
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多