web-dev-qa-db-fra.com

Etrange #nullisland Avertissement de coremotion.framework

Depuis récemment, je suis dans les journaux Xcode beaucoup d'avertissements étranges du cadre coremotion, lié à la fonction 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'}  

Je ne vois aucun dysfonctionnement de mon application. Donc, peut-être que ces journaux peuvent être ignorés, mais ils sont ennuyeux de toute façon.

Mes questions sont :

Comment puis-je corriger une erreur potentielle?
[.____] Comment puis-je arrêter ces avertissements?

8
Reinhard Männer

Apparemment, ce message d'erreur est enregistré si la propriété location d'un CLLocationManager est lue, avant que le CLLocationManager a livré le tout premier lieu.

Ma solution est la suivante:
[.____] J'utilise de toute façon une sous-classe de CLLocationManager qui me permet de définir la propriété location pour des tests par programme. Cela se fait comme suit:

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
    }   
}

Cette sous-classe a maintenant une propriété supplémentaire

  var anyLocationDelivered = false  

qui est défini true dans

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

et le getter est maintenant

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

Maintenant, ce message d'erreur n'est plus enregistré.

0
Reinhard Männer

J'avais cette même erreur lorsque vous essayiez d'obtenir l'emplacement d'un utilisateur dans une application. Il y avait deux choses qui m'empêchent d'obtenir un lat/long valide. Le principal problème que j'avais eu était que j'utilisais un simulateur et j'avais dû régler la position manuellement. Si vous utilisez le simulateur, accédez à Xcode, cliquez sur Débogage -> Simulez l'emplacement et choisissez un emplacement. J'ai également dû s'assurer que les touches d'autorisation d'emplacement correctes ont été ajoutées à Info.Plist. Vous êtes également déjà déjà conscient, mais vous saurez si des clés sont manquantes à partir d'info.plist car un message d'erreur distinct imprimera à la console au-dessus ou au-dessous de ces messages d'erreur Lat/Long, et il vous indiquera quelle clé est manquant. Donc en gros:

  1. Assurez-vous que toutes les autorisations de localisation nécessaires sont acceptées sur le périphérique/simulateur utilisé pour tester l'application.
  2. Une fois que vous avez des autorisations de localisation, définissez un emplacement si vous utilisez un simulateur.

Je ne sais pas si cela aidera du tout, mais j'espère que ça fait. Si vous avez déjà confirmé que ce ne sont pas des problèmes, je ne suis pas sûr de ce qui peut causer la question dans votre cas, mais en vous relevant que les parties de votre code responsables de la récupération de l'emplacement de l'utilisateur seraient probablement bénéfiques pour voir quel lien Le processus échoue.

0
James D