J'ai besoin de trouver mon emplacement actuel avec CoreLocation
, j'ai essayé plusieurs méthodes mais jusqu'à présent, mon CLLocationManager
n'a renvoyé que des 0 .. (0.000.00.000
).
Voici mon code (mis à jour pour fonctionner):
Importations :
#import <CoreLocation/CoreLocation.h>
Déclaré :
IBOutlet CLLocationManager *locationManager;
IBOutlet UILabel *latLabel;
IBOutlet UILabel *longLabel;
Fonctions :
- (void)getLocation { //Called when needed
latLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude];
longLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];
}
- (void)viewDidLoad {
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}
Vous pouvez trouver votre position en utilisant CoreLocation
comme ceci:
importer CoreLocation
:
#import <CoreLocation/CoreLocation.h>
Déclarez CLLocationManager
:
CLLocationManager *locationManager;
Initialisez le locationManager
dans viewDidLoad
et créez une fonction qui peut return
l'emplacement actuel en tant que NSString
:
- (NSString *)deviceLocation {
return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
}
- (void)viewDidLoad
{
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}
Et l'appel de la fonction deviceLocation
renverra l'emplacement comme prévu:
NSLog(@"%@", [self deviceLocation]);
C'est juste un exemple. Initialiser CLLocationManager
sans que l'utilisateur ne soit prêt pour cela n'est pas une bonne idée. Et, bien sûr, locationManager.location.coordinate
peut être utilisé pour obtenir latitude
et longitude
à volonté après l'initialisation de CLLocationManager
.
N'oubliez pas d'ajouter le CoreLocation.framework
dans les paramètres de votre projet sous l'onglet Générer des phases (Targets->Build Phases->Link Binary
).
Avec CLLocationManager, vous n'avez pas besoin d'obtenir immédiatement les informations de localisation. Le GPS et les autres appareils qui obtiennent des informations de localisation peuvent ne pas être initialisés. Ils peuvent prendre un certain temps avant d'avoir des informations. Au lieu de cela, vous devez créer un objet délégué qui répond à locationManager:didUpdateToLocation:fromLocation:
, puis définissez-le comme délégué du gestionnaire d'emplacement.
voir ici