Таким образом, я сохраняю местоположение пользователей нажатием кнопки в NSUserDefault.Но когда я это называю, я получаю нулевое значение.
Цель состоит в том, чтобы получить местоположение пользователя (готово), а затем сохранить его, чтобы при перезагрузке карты булавка снова показывала, где пользователь когда-то был.Прямо сейчас он очищает и сбрасывает карту.
Сохранение при нажатии кнопки:
MKCoordinateRegion location1;
location1.center.latitude =locationManager.location.coordinate.latitude;
location1.center.longitude= locationManager.location.coordinate.longitude;
location1.span.longitudeDelta=0.1;
location1.span.latitudeDelta =0.1;
MapAnnotation *ann1 =[[MapAnnotation alloc] init];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
ann1.coordinate= location1.center;
[mapView addAnnotation:ann1];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setDouble:location1.center.latitude forKey:@"savedCoordinate-latitude"];
[ud setDouble:location1.center.longitude forKey:@"savedCoordinate-longitude"];
[ud setBool:YES forKey:@"savedCoordinate-exists"];
[ud synchronize];
Вызов в представленииWillAppear:
-(void)viewWillAppear:(BOOL)animated{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
if ([ud boolForKey:@"savedCoordinate-exists"])
{
CLLocationCoordinate2D savedCoordinate;
savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"];
savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"];
//create annotation object using savedCoordinate and add to map view...
NSLog(@"%@",savedCoordinate.latitude);
MKCoordinateRegion location1;
//location1.center.latitude =savedCoordinate.latitude;
//location1.center.longitude= savedCoordinate.longitude;
location1.span.longitudeDelta=0.1;
location1.span.latitudeDelta =0.1;
MapAnnotation *ann1 =[[MapAnnotation alloc] init];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
ann1.coordinate= savedCoordinate;
[mapView addAnnotation:ann1];
}
}
Полная .m страница:
#import "LocationTestViewController.h"
#import "CoreLocation/CoreLocation.h"
#import "MapAnnotation.h"
@implementation LocationTestViewController
@synthesize locationManager;
@synthesize mapView;
@synthesize labelText;
- (void)dealloc
{
[mapView release];
[locationManager release];
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
}*/
-(void)viewWillAppear:(BOOL)animated{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
if ([ud boolForKey:@"savedCoordinate-exists"])
{
CLLocationCoordinate2D savedCoordinate;
savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"];
savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"];
//create annotation object using savedCoordinate and add to map view...
NSLog(@"%f",savedCoordinate.latitude);
MKCoordinateRegion location1;
//location1.center.latitude =savedCoordinate.latitude;
//location1.center.longitude= savedCoordinate.longitude;
location1.span.longitudeDelta=0.1;
location1.span.latitudeDelta =0.1;
MapAnnotation *ann1 =[[MapAnnotation alloc] init];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
ann1.coordinate= savedCoordinate;
[mapView addAnnotation:ann1];
}
}
- (void)viewDidUnload
{
[self setMapView:nil];
[self setLocationManager:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (IBAction)getLocation:(id)sender {
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter=kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
MKCoordinateRegion region = {{0.0,0.0},{0.0,0.0}};
region.center.latitude = locationManager.location.coordinate.latitude;
region.center.longitude = locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.005f;
region.span.latitudeDelta = 0.005f;
[mapView setRegion:region animated:YES];
[mapView setDelegate:sender];
MKCoordinateRegion location1;
location1.center.latitude =locationManager.location.coordinate.latitude;
location1.center.longitude= locationManager.location.coordinate.longitude;
location1.span.longitudeDelta=0.1;
location1.span.latitudeDelta =0.1;
labelText.text = [NSString stringWithFormat:@"LATITUDE: %f", location1.center.latitude];
NSLog(@"button b4 save: %@", [NSString stringWithFormat:@"LATITUDE: %f", locationManager.location.coordinate.latitude]);
MapAnnotation *ann1 =[[MapAnnotation alloc] init];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
ann1.coordinate= location1.center;
[mapView addAnnotation:ann1];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setDouble:location1.center.latitude forKey:@"savedCoordinate-latitude"];
[ud setDouble:location1.center.longitude forKey:@"savedCoordinate-longitude"];
[ud setBool:YES forKey:@"savedCoordinate-exists"];
[ud synchronize];
CLLocationCoordinate2D savedCoordinate;
savedCoordinate.latitude = [ud doubleForKey:@"savedCoordinate-latitude"];
savedCoordinate.longitude = [ud doubleForKey:@"savedCoordinate-longitude"];
//create annotation object using savedCoordinate and add to map view...
NSLog(@"button push, %f",savedCoordinate.latitude);
}
- (IBAction)clearPins:(id)sender{
NSArray *annotations = [mapView annotations];
for (id annotation in annotations)
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
continue;
}
[mapView removeAnnotation:annotation];
}
}
-(IBAction)goMainMenu{
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
@end
РЕДАКТИРОВАТЬ РЕШЕНИЕ:
Я добавил это к своему методу кнопки:
CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);
NSUserDefaults *gLat = [NSUserDefaults standardUserDefaults];
[gLat setFloat:userCoordinate.latitude forKey:@"latNumber"];
NSUserDefaults *gLong = [NSUserDefaults standardUserDefaults];
[gLong setFloat:userCoordinate.longitude forKey:@"longNumber"];
float myLat=[gLat floatForKey:@"latNumber"];
NSLog(@"Button Push: lat : %f",myLat);
float myLong=[gLong floatForKey:@"longNumber"];
NSLog(@"Button Push: long : %f",myLong);
Возможно, это не самая чистая вещь, но она выполняет свою работу.