My purpose is to get the longitude/latitude of the user when the view is loaded and to store the values in two variables for later calculations. I don't need to track the user location and to update it, I simply need to get his/her coordinates once. My code looks like this:
- (void)viewDidLoad {
[super viewDidLoad];
// locationManager update as location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
// Configure the new event with information from the location
CLLocationCoordinate2D coordinate = [location coordinate];
float longitude=coordinate.longitude;
float latitude=coordinate.latitude;
NSLog(@"dLongitude : %f",longitude);
NSLog(@"dLatitude : %f", latitude);
}
In the console i keep getting this:
dLongitude : 0.000000
dLatitude : 0.000000
Can you please help me there?
As soon as you call
[locationManager startUpdatingLocation];
your viewDidLoad method is done. You need to implementand
which will be called by your locationManager when it gets the location, or when it fails. In both of those methods, you can call
[locationManager stopUpdatingLocation]
.Inside the didUpdateToLocation method, you should move all your code from viewDidLoad, starting with
CLLocation *location = [locationManager location];
That's where you'll get proper values.Try this Code
// Configure the new event with information from the location
This worked for me
if you are getting Lat lang both (0.00 ,0.00)
this may be solution for your ,
step 1:
NSLocationAlwaysUsageDescription
orNSLocationWhenInUseUsageDescription
Add these two key in
Info.plist
step 2: And than
[locationManager startUpdatingLocation];
start updatingstep 3: and you need to implement two mehthods
of
CLLocationManagerDelegate
in your ViewController interface.To get user's location even once you need to make
locationManager
to start updating locations (you did that) and implement delegate method that manager calls when location is retrieved - you can't get location from location manager immediately.If you don't want to track user location - just stop updating locations in that delegate method after location was fetched for the 1st time (and store it if you need it in future).