来自 CoreMotion.framework 的奇怪 #NullIsland 警告

Rei*_*ner 10 core-location ios core-motion

最近,我在 Xcode 中记录了很多来自 CoreMotion 框架的奇怪警告,这些警告与功能相关getLocationForBundleID

[Client] {"msg":"#NullIsland Either the latitude or longitude was exactly 0! That's highly unlikely", "latIsZero":0, "lonIsZero":0}  
[Client] {"msg":"#NullIsland Received a latitude or longitude from getLocationForBundleID that was exactly zero", "latIsZero":0, "lonIsZero":0, "location":'28 5B E0 D7 EB 7F 00 00'}  
Run Code Online (Sandbox Code Playgroud)

我没有看到我的应用程序有任何故障。所以也许这些日志可以被忽略,但无论如何它们都很烦人。

我的问题是:

如何纠正潜在错误?
我怎样才能停止这些警告?

Rei*_*ner 4

显然,如果在传递第一个位置之前读取locationa 的属性,则会记录此错误消息。CLLocationManagerCLLocationManager

\n

我的解决方案如下:
\n我无论如何都使用它的子类,CLLocationManager它允许我以编程方式设置location测试属性。\n这是按如下方式完成的:

\n
private var _location: CLLocation?\n@objc dynamic override var location: CLLocation? {\n    get { \n        let usedLocation = _location ?? super.location // Here the error is logged if no location has been delivered yet\n        return usedLocation \n    }\n    set {\n        _location = newValue\n    }   \n}\n
Run Code Online (Sandbox Code Playgroud)\n

这个子类现在有一个额外的属性

\n
  var anyLocationDelivered = false  \n
Run Code Online (Sandbox Code Playgroud)\n

是设置true

\n
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {\n        locationManager.anyLocationDelivered = true\n    // \xe2\x80\xa6\n  }  \n
Run Code Online (Sandbox Code Playgroud)\n

现在吸气剂是

\n
get { \n    guard anyLocationDelivered else { return nil }\n    let usedLocation = _location ?? super.location\n    return usedLocation \n}  \n
Run Code Online (Sandbox Code Playgroud)\n

现在不再记录此错误消息。

\n