web-dev-qa-db-ja.com

奇妙な#Nullisland CoreMotion.Frameworkからの警告

最近、私はXcodeに入り、関数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'}  
 _

私は私のアプリの誤動作を見ません。だから多分これらのログは無視することができますが、とにかく厄介です。

私の質問は次のとおりです。

潜在的なエラーを修正する方法
[。ね。]どうやってこれらの警告を止めることができますか?

8

どうやらこのエラーメッセージはlocationのプロパティCLLocationManagerが読み込まれた場合、CLLocationManagerが非常に最初の場所を配信する前にログに記録されます。

私の解決策は次のとおりです。
[。]。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
    // …
  }  
 _

そしてゲッターは今です

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

このエラーメッセージはログに記録されなくなりました。

0

アプリ内のユーザーの場所を取得しようとしているとき、私はこれと同じエラーを得ていました。私が有効なLAT/LONGを得ることを妨げている2つのことがありました。私がシミュレータを使っていて、手動で場所を設定しなければならなかったという主な問題は主な課題でした。シミュレータを使用している場合は、Xcodeに移動して、[デバッグ] - > [場所のシミュレート]をクリックして、場所を選択します。私はまた、正しい位置許可キーがinfo.plistに追加されたことを確認しなければなりませんでした。あなたはおそらくすでに認識していますが、別のエラーメッセージがこれらのLAT/LONDエラーメッセージの上または下にコンソールに印刷されるため、info.plistから鍵が見つからないかどうかがわかります。不足している。だから基本的に:

  1. アプリケーションのテストに使用されているデバイス/シミュレータに必要なすべての場所の権限があることを確認してください。
  2. ロケーションアクセス許可があると、シミュレータを使用している場合は場所を設定します。

これが全く役立つかどうかわからないが、それがそうであることを願っています。あなたがすでにこれらが問題ではないことを確認したことがあるならば、私はあなたの訴訟の問題を引き起こすかもしれないが、ユーザーの場所を取得する責任があるコードの部分をスピンピングすることはおそらく有益であるでしょう。プロセスは失敗しています。

0
James D