2012-02-13 24 views
3

因此,我将用户位置保存在NSUserDefault中的按钮按钮上。但是当我称它为空时。用NSUserDefaults存储和调用用户坐标

的目标是让用户的位置(已完成),然后将其保存,所以当在地图重新加载针显示备份在用户曾经是。现在它清除并重置地图。

保存按钮推:

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]; 
[email protected]"You Parked Here"; 
[email protected]""; 
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]; 
    [email protected]"You Parked Here"; 
    [email protected]""; 
    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]; 
     [email protected]"You Parked Here"; 
     [email protected]""; 
     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]; 
    [email protected]"You Parked Here"; 
    [email protected]""; 
    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 

编辑解决方案:

我加入这我的按钮方法d:

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

NSLog(@“%@”,savedCoordinate.latitude); 似乎nslog将工作不正确 – NeverBe 2012-02-13 22:21:39

+0

你记录了你正在保存的值?他们是否正确?什么从userDefaults返回 - 是正确的?什么是MapAnnotation? – Rayfleck 2012-02-13 22:31:31

+0

嗯,我似乎变得空或0;我怎么把我的绳子拉出来?我会发布更多的代码。 – Rick 2012-02-14 13:58:29

回答

2

%@字符串格式说明为Objective-C对象和不能与浮子使用。尝试使用%f操作是这样的:

NSLog(@"latitude is %f", savedCoordinate.latitude); 

下面是苹果的String Format Specifiers文档。

+0

我注意到,使用带有坐标的“float”会截断最后几位数字(或将它们舍入)......是否有任何其他数字变量可用于存储更多坐标值? – 2013-03-10 15:32:28

+0

我不知道具体情况,所以我会把你推荐给[这个答案](http://stackoverflow.com/a/1074537/255489)。 – 2013-03-11 16:40:00

相关问题