iOS CLLocationManager dans une classe séparée
J'ai vue multiples sur les contrôleurs qui ont besoin d'obtenir l'emplacement de l'utilisateur, j'ai donc voulu créer une catégorie distincte que la ViewControllers pouvez appeler pour obtenir de l'utilisateur du dernier emplacement.
locationManager:didUpdateToLocation:fromLocation renvoie void. Comment puis-je passer de la latitude et de longitude données pour mon ViewControllers dès que l'utilisateur latitude et de longitude est-il calculé?
Je pourrais essayer d'écrire des getters et setters dans mon locationManaging classe, mais si je fais ça, comment puis-je savoir quand faire appel à la latitude de lecture et de longitude des méthodes de lecture de mon ViewController classe? Comment dois-je tenir le ViewController thread principal à attendre pour les valeurs de latitude et longitude de la locationManaging classe?
Merci!
source d'informationauteur user1467188
Vous devez vous connecter pour publier un commentaire.
Créer une classe singleton qui a un
latitude
etlongitude
propriétés,startLocating
etendLocating
. Dans la classe, créer unCLLocationManager
exemple, et l'ensemble de son délégué, pour être le singleton. DansstartLocating
etendLocating
appeler les méthodes de laCLLocationManager
instance. Faire le délégué des méthodes de mise à jour de lalatitude
etlongitude
propriétés. En d'autresViewControllers
lisez ce singletonlatitude
etlongitude
propriétés.De savoir lire ces propriétés à partir d'un autre
ViewController
définir un observateur sur ces propriétés (voir la NSKeyValueObserving Protocole De RéférenceAvant de faire cela, recherchez les Internets pour le code existant.
Après avoir fait cela, de le télécharger sur GitHub avec une licence permissive.
Comme user1071136 dit, un singleton emplacement manager est probablement ce que vous voulez. Créer une classe, sous-classe de NSObject, avec seulement une propriété, un
CLLocationManager
.LocationManagerSingleton.h:
LocationManagerSingleton.m:
Pour obtenir le plus de récemment reçu emplacement, il suffit d'utiliser
[LocationManagerSingleton sharedSingleton].locationManager.location
. Il peut prendre quelques secondes pour se réchauffer le GPS pour obtenir des endroits précis.Basé sur les réponses ci-dessus, voici ce que j'ai fait et vous pouvez trouver de l'exemple complet sur github https://github.com/irfanlone/CLLocationManager-Singleton-Swift
Il suffit d'importer ce fichier dans votre projet, vous pouvez choisir de mettre en œuvre les LocationUpdateProtocol ou écouter de la notification de l'emplacement des mises à jour
Utilisation:
Voici ce que j'ai fait lors de la mise en œuvre d'un emplacement crèche singleton en swift. Il est basé sur user1071136 de la stratégie, ainsi que ce modèle swift.
Dans le processus d'apprentissage pour obtenir l'emplacement de l'utilisateur dans une classe singleton, j'ai téléchargé ce code https://github.com/irfanlone/CLLocationManager-Singleton-Swift. Après foddleing avec pour s'en run sur Xcode8.3.3 Swift 3, je ne peux pas obtenir une sortie dans la console de débogage. En fait je ne peux même pas avoir cette position autherization dlalog à afficher. Je soupçonne les données de l'singleton n'est pas passé à la vue du contrôleur, mais je ne peux pas fine la solution, pouvez-vous voir ce qui est mal? Merci.
Le code corrigé pour Swift 3: