27 votes

Comment stocker CLLocation à l'aide de Core Data (iPhone)?

J'essaie d'enregistrer un emplacement et de récupérer l'emplacement sur une carte par la suite en utilisant les cadres Core Location, MapKit et Core Data.

Ce que j'ai fait, c'est que j'ai créé une entité nommée POI et ajouté des propriétés telles que la latitude (double type), la longitude (double type) avec quelques autres.

Autrement dit, mon application enregistre POI avec deux NSNumbers. (lat et long) mais je pense qu'il doit y avoir un moyen plus intelligent de stocker CLLocation que cela.

à votre santé.

30voto

nevan king Points 46410

Ce que vous faites est bien. Vous devez enregistrer la latitude et la longitude en double dans la Base de Données. Lorsque vous avez besoin pour obtenir à nouveau les informations, obtenir le double de retour à partir de Données de Base et de construire un CLLocationCoordinate2D struct avec une fonction comme CLLocationCoordinate2DMake. Il n'y a pas construit dans le moyen de stocker de l'emplacement, de sorte que le stockage de la latitude et la longitude des composants est très bien.

Si vous n'êtes pas d'effectuer toutes les opérations de calcul de la latitude et de la longitude (trouver les cases etc), vous pouvez stocker des chaînes de caractères. Des flotteurs et des doubles peuvent modifier leurs valeurs légèrement, ce qui rend la comparaison des opérations échouent.

24voto

TechZen Points 52692

CLLocation met en œuvre la NSCoding protocole, de sorte que vous pouvez les stocker dans la Base de Données comme transformables attributs. Vous pouvez utiliser la valeur par défaut NSKeyedUnarchiveFromData valeur transformateur.

Vous venez de passer le CCLocation objet pour la gestion des attributs de l'objet et il serait sérialiser des données et l'enregistrer comme une tache dans le SQL magasin. Lorsque vous avez besoin de l'emplacement de l'objet, il serait automatiquement inverser le processus et de revenir à vous une entièrement rempli CCLocation objet.

Que peut-être la façon la plus simple d'obtenir ce que vous voulez.

17voto

tc. Points 23958

La "meilleure" façon de stocker cela dépend de ce que vous voulez faire avec elle:

  • Si vous souhaitez que le "même" CLLocation, sérialiser. NSKeyedUnarchiveFromData est très bien.
  • Si vous voulez juste faire de la recherche sur la latitude et la longitude, ensuite stocker ces doubles (et cocher la case "indexée" case à cocher).

Il y a un tas de propriétés supplémentaires, vous pouvez sauvegarder/restaurer si vous le faites manuellement (altitude, horizontalAccuracy, verticalAccuracy, timestamp). Il ya un peu plus que vous ne pouvez pas (vitesse, cap); CLLocation ne pas fournir une bonne init-méthode et les propriétés sont en lecture seule.

Toutes les propriétés supplémentaires sont utiles si vous êtes l'enregistrement d'une piste. L'Altitude est utile si vous effectuez l'enregistrement d'un POI sur un terrain montagneux ("nous avons encore à gravir 100 m"). horizontale/verticale de précision peuvent être utilisés pour représenter la taille de la PI est (par exemple, une ville peut avoir une "précision horizontale" de plusieurs km et l'afficher comme un grand cercle).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X