Note that there are some explanatory texts on larger screens.

plurals
  1. POStoring and recalling user coords with NSUserDefaults
    primarykey
    data
    text
    <p>So I am saving the users location on a button push in a NSUserDefault. But When I call it I get null.</p> <p>The goal is to get the users location(done) and then save it so when the map is reloaded the pin shows back up where the user once was. Right now it clears and resets the map. </p> <p>Saving on button push:</p> <pre><code> 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]; </code></pre> <p>Recalling in viewWillAppear:</p> <pre><code> -(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]; } } </code></pre> <p>Full .m page:</p> <pre><code> #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 </code></pre> <p>EDIT SOLUTION:</p> <p>I added this to my button method:</p> <pre><code> 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); </code></pre> <p>May not be the cleanest thing but it gets the job done.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload