所以我在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];
回顾viewWillAppear:
-(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);
可能不是最干净的事情,但它可以完成工作。
答案 0 :(得分:2)
%@
字符串格式说明符用于Objective-C对象,不能与浮点数一起使用。尝试使用%f
运算符,如下所示:
NSLog(@"latitude is %f", savedCoordinate.latitude);
这是Apple关于String Format Specifiers的文档。