Я следую некоторому руководству и смешиваю свой ужасный код.Теперь я могу узнать свое текущее местоположение.И когда я нажимаю на кнопку, она запускает булавку, которая находится на моем текущем местоположении.Если я нажму на булавку, в сообщении появится адрес моего текущего.
У меня два вопроса:
Почему я не могу получить более точный адрес?Теперь я получаю адрес с указанием страны, города и района, но без названия дороги.
Как я могу получить «текст» адреса текущего местоположения?Я хочу отобразить адрес в UILabel в другом месте, но не знаю, как это сделать.
Большое спасибо!
вот .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
А вот и .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