I follow the instructions and mix my horrible code. Now I can get my current location. And when I click on the button, it calls up a pin that is in my current location. If I click on a contact, the message displays my current address.
I have two questions:
Why can't I get a more accurate address? Now I get the address for the country, city and county, but without the name of the road.
How can I get the "text" address of the current location? I want to display the address in UILabel elsewhere, but donβt know how to do it.
Thank you very much!
here .h
#import <UIKit/UIKit.h> #import "MapKit/MapKit.h" #import "CoreLocation/CoreLocation.h" @interface UserLocationAddressViewController : UIViewController <MKMapViewDelegate,MKReverseGeocoderDelegate> { MKMapView *userLocationAddMapView; CLLocationManager *locationManager; } @property (nonatomic, retain) MKMapView *userLocationAddMapView; -(IBAction)getUserLocationAddress:(id)sender; @end
And here .m
#import "UserLocationAddressViewController.h" @implementation UserLocationAddressViewController @synthesize userLocationAddMapView; -(IBAction)getUserLocationAddress:(id)sender { MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:locationManager.location.coordinate]; geoCoder.delegate = self; [geoCoder start]; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -(void)dealloc { [userLocationAddMapView release]; [super dealloc]; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.userLocationAddMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; userLocationAddMapView.showsUserLocation = YES; userLocationAddMapView.delegate = self; self.userLocationAddMapView.mapType = MKMapTypeStandard; locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; CLLocationCoordinate2D coordinate = locationManager.location.coordinate; MKCoordinateRegion mapRegion; mapRegion.center = coordinate; MKCoordinateSpan mapSpan; mapSpan.latitudeDelta = 0.006; mapSpan.longitudeDelta = 0.006; mapRegion.span = mapSpan; [userLocationAddMapView setRegion:mapRegion animated:YES]; self.userLocationAddMapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:self.userLocationAddMapView]; self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Get Add" style:UIBarButtonItemStylePlain target:self action:@selector(getUserLocationAddress:)] autorelease]; } -(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark { NSLog(@"placemark %f %f", placemark.coordinate.latitude, placemark.coordinate.longitude); NSLog(@"addressDictionary %@", placemark.addressDictionary); [userLocationAddMapView addAnnotations:[NSArray arrayWithObjects:placemark, nil]]; [geocoder release]; } -(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error { NSLog(@"reverseGeocoder fail"); [geocoder release]; } - (void)viewDidUnload { [super viewDidUnload]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end
source share