7
votes

Arrêtez de retourner Cached CLLOCLERGERGER

Je me demande s'il y a un moyen de le faire pour que CllouerManager ne renvoya pas automatiquement un emplacement en cache. Je comprends que les documents disent "le service de localisation renvoie un emplacement initial le plus rapidement possible, renvoyant des informations en cache lorsqu'elle est disponible" mais cet emplacement mis en cache pourrait être extrêmement éloigné de l'emplacement actuel de l'utilisateur et je l'aimerais plus précisé si possible. < / p>

Merci pour une aide!


0 commentaires

4 Réponses :


0
votes

Vous pouvez utiliser cette propriété de cllouerManager: xxx

la valeur de cette propriété est nil si aucune donnée d'emplacement n'a jamais été récupérée, sinon, c'est là que La corelocation met en cache ses données. Par conséquent, si vous souhaitez toujours commencer à partir de zéro, vérifiez simplement si cette propriété est nil ou non. Si c'est nil , alors vous allez bien; Sinon, vous devez arrêter votre gestionnaire de localisation et recommencer: cela obligera une mise à jour, ce qui entraînera la valeur mise en cache écrasée par le frais que vous venez de déclencher.


3 commentaires

Bonjour intégré: j'ai interprété la documentation pour dire que l'emplacement est mis en cache sur un niveau système (bien que si cela ne soit pas précis, merci de me le faire savoir). Est-ce que cela fonctionne dans ce scénario?


À ma connaissance, ce que vous appelez le niveau du système est la propriété de localisation; Par conséquent, cela devrait fonctionner. Vous pouvez vérifier cela en utilisant l'emplacement de base de votre application afin que la propriété de localisation ne soit pas nulle. Ensuite, supprimez l'application de l'appareil, éteignez-la et allumez-la, puis vous installez à nouveau que l'application provoque l'apparition du panneau de confirmation (autorisation d'utiliser votre position) et j'ai vérifié que la propriété de localisation est toujours nulle dans ce cas. Maintenant, au lieu de faire tout cela, vous devez simplement vous débarrasser de l'ancienne valeur mise en cache, arrêtez votre gestionnaire de localisation et recommencer à nouveau.


Vous pouvez également réinitialiser les avertissements de localisation dans les paramètres; Cela devrait également réinitialiser la propriété de localisation sans supprimer / réinstaller votre application.



0
votes

Voir ma réponse ici: Comment supprimer la cache de Cllocation? à propos de "Comment supprimer la cache de la cllocation". Cela devrait résoudre votre problème concernant la cache du cllouerManager.


2 commentaires

Salut Yonel: Que suggéreriez-vous que je définissais SECS_OLD_MAX?


Une position "récente" a moins de 1 ou 2 secondes, donc si vous comparez l'horodatage de la cllocation et du "maintenant", et que vous avez moins de 2 ou 3 secondes, vous pouvez envisager cette instance de cllocation comme une bonne.



16
votes

Vous ne pouvez pas l'arrêter de mettre en cache, mais il n'est pas difficile de filtrer les données en cache. L'emplacement central comprend un horodatage avec ses emplacements. Comparez l'horodatage de l'emplacement avec un horodatage enregistré lorsque votre application a commencé et vous pourrez savoir quels endroits sont anciens (mis en cache, trouvés avant votre application) et qui sont nouveaux. Jeter les anciens.

L'emplacement TIMESTAMP est un nsdate, alors obtenez simplement la valeur de [date nsdate] lorsque votre application démarre et utilisez-la comme point de référence lors du filtrage des emplacements. Vous pouvez même jeter la valeur de référence une fois que vous commencez à avoir de nouvelles données et que vous traitez une date de référence nulle comme impliquant que de nouveaux emplacements devraient être approuvés.


1 commentaires

Cette solution ne fonctionne pas si l'utilisateur modifie la date et l'heure du périphérique.



8
votes
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{
    if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec. 
    { 
         // do something 
    } 
 }

0 commentaires