Was Sie tun müssen, ist ein Setup CLLocationManager
, das Ihre aktuellen Koordinaten findet. Mit den aktuellen Koordinaten müssen Sie MKReverseGeoCoder
Ihren Standort finden.
- (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);
}
Ab iOS 5
MKReverseGeoCoder
ist veraltet!So möchten Sie verwenden
CLGeocoder
mitCLLocationManager
, sehr einfach und funktioniert mit Block.Beispiel:
Bearbeiten: Anstelle einer
for in
Schleife können Sie auch Folgendes tun:quelle
Das funktioniert gut für mich:
quelle
kCLErrorDomain error 8
Weißt du warum?Wenn jemand versucht, von MKReverseGeocoder auf CLGeocoder umzusteigen, habe ich einen Blog-Beitrag geschrieben, der hilfreich sein könnte: http://jonathanfield.me/jons-blog/clgeocoder-example.html
Grundsätzlich wäre ein Beispiel, nachdem Sie locationManager- und CLGeocoder-Objekte erstellt haben, fügen Sie diesen Code einfach zu viewDidLoad () hinzu und erstellen Sie dann einige Beschriftungen oder Textbereiche, um die Daten anzuzeigen.
quelle
nil
wird und Nachrichten gesendet, um zunil
resultierennil
, sowie Eigenschaftszugriff durch Punktnotation übernil
.error
Davon abgesehen sollte man immer prüfen, ob dies nicht der Fall istnil
.Wenn jemand es in Swift 3 braucht , habe ich es so gemacht:
quelle
Nachdem Sie CLLocationManager eingerichtet haben, erhalten Sie eine Standortaktualisierung als Breiten- / Längengradpaar. Dann können Sie CLGeocoder verwenden, um die Koordinate in einen benutzerfreundlichen Ortsnamen zu konvertieren.
Hier ist der Beispielcode in Swift 4 .
quelle
Sie müssen den aktuellen Standort des Benutzers ermitteln und dann mit MKReverseGeocoder die Stadt erkennen.
Im iPhone App-Programmierhandbuch , Kapitel 8, finden Sie ein hervorragendes Beispiel . Wenn Sie den Standort-Geocoder initialisiert haben, legen Sie den Delegaten fest und lesen Sie das Land von der Ortsmarke. Lesen Sie die Dokumentation zu MKReverseGeocodeDelegate und erstellen Sie Methoden:
reverseGeocoder: didFailWithError:
quelle
Mit diesem Code können Sie die aktuelle Stadt abrufen: -
Erweiterung YourController: CLLocationManagerDelegate {func locationManager (Manager: CLLocationManager, didUpdateLocations-Speicherorte: [CLLocation]) {
quelle
quelle
Hier ist meine kleine Swift-Klasse, die mir hilft, umgekehrte geokodierte Informationen über den aktuellen Standort zu erhalten. Vergessen Sie nicht das
NSLocationWhenInUseUsageDescription
Feld inInfo.plist
.quelle
Lesen Sie die Dokumentation zu MKReverseGeocoder - die Dokumentation, Anleitungen und Beispielanwendungen werden von Apple aus einem bestimmten Grund bereitgestellt.
quelle