【问题标题】:Strange #NullIsland warning from CoreMotion.framework来自 CoreMotion.framework 的奇怪 #NullIsland 警告
【发布时间】:2021-03-05 05:43:09
【问题描述】:

最近以来,我在 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'}  

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

我的问题是:

如何纠正潜在的错误?
如何停止这些警告?

【问题讨论】:

  • 在视图控制器上检查你的代理。我也面临同样的问题。我的代理没有添加到 UI 视图控制器上。enter image description here
  • 我不确定我是否理解正确:如果未设置对象的委托,则通常根本不调用委托函数。但这不会产生像我的问题中那样的警告。你收到同样的警告了吗?
  • 我也开始在我的项目中使用 iOS 14 看到这些。似乎大多无害但令人讨厌。
  • 应用在前台时会出现这种情况吗?如果不是,则警告可能是因为位置跟踪设置为仅在使用该应用时才允许。

标签: ios core-location core-motion


【解决方案1】:
  1. 问题可能是您在模拟器上运行了您的应用程序,除非您在“调试”、“模拟位置”中手动更改模拟位置,否则默认情况下它不会使用您当前的位置。
  2. 要解决此问题,请模拟您的当前位置(如上所述)或在您的物理签名设备上运行您的应用程序,完全关闭该应用程序,然后重新启动您的应用程序。

【讨论】:

    【解决方案2】:

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

    我的解决方案如下:
    无论如何,我使用CLLocationManager 的子类,它允许我以编程方式为测试设置location 属性。 这样做如下:

    private var _location: CLLocation?
    @objc dynamic override var location: CLLocation? {
        get { 
            let usedLocation = _location ?? super.location // Here the error is logged if no location has been delivered yet
            return usedLocation 
        }
        set {
            _location = newValue
        }   
    }
    

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

      var anyLocationDelivered = false  
    

    这是在true 中设置的

        func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            locationManager.anyLocationDelivered = true
        // …
      }  
    

    getter 现在是

    get { 
        guard anyLocationDelivered else { return nil }
        let usedLocation = _location ?? super.location
        return usedLocation 
    }  
    

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

    【讨论】:

      【解决方案3】:

      尝试在应用中获取用户的位置时,我遇到了同样的错误。有两件事阻止我获得有效的纬度/经度。我遇到的主要问题是我使用的是模拟器并且必须手动设置位置。如果您使用的是模拟器,请转到 XCode,单击 Debug --> Simulate Location,然后选择一个位置。我还必须确保将正确的位置权限密钥添加到 Info.plist。您可能也已经知道,但是您会知道 Info.plist 中是否缺少任何键,因为单独的错误消息将打印到控制台上方或下方这些 lat/long 错误消息,它会告诉您哪个键不见了。所以基本上:

      1. 确保您在用于测试应用程序的设备/模拟器上接受了所有必要的位置权限。
      2. 获得位置权限后,如果使用模拟器,请设置位置。

      不确定这是否会有所帮助,但我希望会有所帮助。如果您已经确认这些不是问题,我不确定是什么导致了您的问题,但是单步执行负责获取用户位置的代码部分可能有助于查看哪个链接在进程失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-11
        • 2012-03-04
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        相关资源
        最近更新 更多