title: iphone app - how to get the current location only once and store that to be used in another function?
body: <p>I've been working on this for the past 2 weeks - i have an app that shows a legible route on a map that goes from a start point to a destination point. the destination point is the users address (as defined/entered by the user in the settings menu we have set up) and if i hard code the start point, the map, route and application all work fine. once i try to implement anything that involves using the cllocation or cllocationmanager, it crashes and gives me a thread error (there are 3). </p>
  
  <p>Here is the current view controller header &amp; implementation file for this:</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  #import &lt;MapKit/MapKit.h&gt;
  #import "MapView.h"
  #import "Place.h"
  #import &lt;CoreLocation/CoreLocation.h&gt;
  
  
  @interface HomeMapViewController : UIViewController &lt;MKMapViewDelegate, CLLocationManagerDelegate&gt;{
  
      IBOutlet UILabel *HomeAddressLabel;
  
  }
  
  @property (weak, nonatomic) IBOutlet MKMapView *MapView;
  @property (strong, nonatomic) IBOutlet CLLocationManager *location;
  @end
  </code></pre>
  
  <p>implementation file:</p>
  
  <pre><code>#import "HomeMapViewController.h"
  
  
  
  @interface HomeMapViewController ()
  
  @end
  
  
  @implementation HomeMapViewController
  @synthesize MapView;
  @synthesize location;
  double lat = 37.331706;
  double lon = -122.030598;
  - (id)initWithNibNameNSString *)nibNameOrNil bundleNSBundle *)nibBundleOrNil
  {
      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      if (self) {
          // Custom initialization
      }
      return self;
  }
  
  
  - (void)viewDidLoad
  {
      //Retrieve saved address before view loads
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSString *HomeAddress = [defaults objectForKey:@"HomeAddress"];
      NSString *HomeCity = [defaults objectForKey:@"HomeCity"];
      NSString *HomeProvince = [defaults objectForKey:@"HomeProvince"];
      NSString *HomeZip = [defaults objectForKey:@"HomeZip"];
      NSString *HomeCountry = [defaults objectForKey:@"HomeCountry"];
      NSString *HomeAddressFull = [NSString stringWithFormat:@"%@, %@, %@, %@, %@", HomeAddress, HomeCity, HomeProvince, HomeZip, HomeCountry];
  
      //Set address label to saved address values
      HomeAddressLabel.text = HomeAddressFull;
  
  
  
      //Map Route Code
  
          MapView* mapView = [[MapView alloc] initWithFrame:
                          CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
          //Shows user location
  
      [self.MapView setShowsUserLocation:YES];
      //set which mapview to show
          [self.MapView addSubview:mapView];
  
      self.location = [[CLLocationManager alloc]init];
      location.delegate = self;
      location.desiredAccuracy=kCLLocationAccuracyBest;
      location.distanceFilter = kCLLocationAccuracyBestForNavigation;//constant update of device location
      [location startUpdatingLocation];
  
  
      Place* start = [[Place alloc] init];
      start.name = @"Start Location";
      start.description = @"You started here.";
      //^should be changed to current location once that is implemented
      //start.latitude =    37.331706;
      //start.longitude = -122.030598;
      start.latitude = lat;
      start.longitude = lon;
      //start.latitude = location.location.coordinate.latitude;
      //start.longitude = location.location.coordinate.longitude;
  
  
      //Geocoder Code
      CLGeocoder *geocoder = [[CLGeocoder alloc] init];
      [geocoder geocodeAddressString:HomeAddressFull completionHandler:^(NSArray *placemarks, NSError *error) {
          if (error) {
              NSLog(@"Error: %@", [error localizedDescription]);
              return;
          }
  
          for (id object in placemarks) {
              CLPlacemark *placemark = object;
  
  
  
              Place* destination = [[Place alloc] init];
              destination.name = @"Destination";
              destination.description = [NSString stringWithFormat:@"%@, %@, %@", HomeAddress, HomeCity, HomeProvince];
              destination.latitude = placemark.location.coordinate.latitude;
              destination.longitude = placemark.location.coordinate.longitude;
  
              [mapView showRouteFrom:start toestination];
          }
      }];
  
  
      [super viewDidLoad];
  
  }
  
  - (void)locationManagerCLLocationManager *)manager didUpdateToLocationCLLocation *)newLocation fromLocationCLLocation *)oldLocation{
      [manager stopUpdatingLocation];
  
  }
  
  
  
  //************NEW METHOD
  -(void)locationManagerCLLocationManager *)manager didFailWithErrorNSError *)error{
      NSString *msg = @"Error obtraining location:";
      UIAlertView *alert;
      alert = [[UIAlertView alloc]
               initWithTitle:@"Error"
               message:msg delegate:self
               cancelButtonTitle:@"OK"
               otherButtonTitles: nil];
      [alert show];
  
  }
  
  - (void)viewDidUnload
  {
      [self setMapView:nil];
      HomeAddressLabel = nil;
      [super viewDidUnload];
      // Release any retained subviews of the main view.
  }
  
  - (BOOL)shouldAutorotateToInterfaceOrientationUIInterfaceOrientation)interfaceOrientation
  {
      return (interfaceOrientation == UIInterfaceOrientationPortrait);
  }
  
  
  @end
  </code></pre>
  
  <p>I'd basically like to ask if anyone can help shed some light on how I might go about getting the users current location coordinates and storing them as the start.latitude and start.longitude values so the route shows a pathway from the users current location to their destination. the route is not supposed to update itself as the user moves, I would just like to have an annotation/placemark on the users current location and destination (as i do have) and then the blue point (aka the user) will be able to see themselves move along the route they are to take. I've tried all the suggestions on here - and some havent worked at all, some worked only once and then after that it failed to work again (even after resetting the simulator content!). some links are relevant but very outdated so the methods there don't work.</p>
  
  <p>And here i was thinking getting the users current location coordinates would be the easier task of this function!</p>