Ce que vous devez faire est de configurer un CLLocationManager
qui trouvera vos coordonnées actuelles. Avec les coordonnées actuelles que vous devez utiliser MKReverseGeoCoder
pour trouver votre position.
- (void)viewDidLoad
{
// this creates the CCLocationManager that will find your current location
CLLocationManager *locationManager = [[[CLLocationManager alloc] init] autorelease];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];
}
// this delegate is called when the app successfully finds your current location
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// this creates a MKReverseGeocoder to find a placemark using the found coordinates
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];
geoCoder.delegate = self;
[geoCoder start];
}
// this delegate method is called if an error occurs in locating your current location
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"locationManager:%@ didFailWithError:%@", manager, error);
}
// this delegate is called when the reverseGeocoder finds a placemark
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
MKPlacemark * myPlacemark = placemark;
// with the placemark you can now retrieve the city name
NSString *city = [myPlacemark.addressDictionary objectForKey:(NSString*) kABPersonAddressCityKey];
}
// this delegate is called when the reversegeocoder fails to find a placemark
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
NSLog(@"reverseGeocoder:%@ didFailWithError:%@", geocoder, error);
}
À partir d'iOS 5, il
MKReverseGeoCoder
est obsolète!Donc, vous voulez utiliser
CLGeocoder
avecCLLocationManager
, très simple et fonctionne avec block.Exemple:
Edit: Au lieu d'une
for in
boucle, vous pouvez également faire:la source
Cela fonctionne bien pour moi:
la source
kCLErrorDomain error 8
savez-vous pourquoi?Si quelqu'un essaie de passer à CLGeocoder depuis MKReverseGeocoder, j'ai écrit un article de blog qui pourrait être utile http://jonathanfield.me/jons-blog/clgeocoder-example.html
Fondamentalement, un exemple serait, après avoir créé des objets locationManager et CLGeocoder, ajoutez simplement ce code à votre viewDidLoad (), puis créez des étiquettes ou des zones de texte pour afficher les données.
la source
nil
, et les messages envoyés ennil
résultatnil
, ainsi que l'accès aux propriétés via la notation par points vianil
. Cela étant dit, il faut toujours vérifier sierror
est non-nil
.Si quelqu'un en a besoin dans Swift 3 , voici comment je l'ai fait:
la source
Après avoir configuré CLLocationManager, vous obtiendrez la mise à jour de l'emplacement sous forme de paire latitude / longitude. Ensuite, vous pouvez utiliser CLGeocoder pour convertir les coordonnées en un nom de lieu convivial.
Voici l'exemple de code dans Swift 4 .
la source
Vous devez obtenir l'emplacement actuel de l'utilisateur, puis utiliser MKReverseGeocoder pour reconnaître la ville.
Il y a un excellent exemple dans le Guide de programmation des applications iPhone , chapitre 8. Une fois que vous avez initialisé le géocodeur, définissez le délégué et lisez le pays à partir du repère. Lisez la documentation de MKReverseGeocodeDelegate et créez des méthodes:
reverseGeocoder: didFailWithError:
la source
Vous pouvez utiliser ce code pour obtenir la ville actuelle: -
extension YourController: CLLocationManagerDelegate {func locationManager (manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
la source
la source
Voici ma petite classe Swift qui m'aide à obtenir des informations géocodées inversées sur l'emplacement actuel. N'oubliez pas le
NSLocationWhenInUseUsageDescription
champ enInfo.plist
.la source
Lisez la documentation de MKReverseGeocoder - la documentation, les guides et les exemples d'applications sont fournis par Apple pour une raison.
la source