Dan Winter-Wijntjes
Dan Winter-Wijntjes

Reputation: 312

Current Location returning 0

My Xcode app that I am developing needs to get the latitude and longitude of the users iOS device. Although currently all I get is 0 for both values. It does not ask for permission to have the location, and I am on a real device not a simulator.

NSLocationAlwaysUsageDescription is in my info.plist

I have also imported CoreLocation and in my .h file

@interface LocationViewController : UIViewController <CLLocationManagerDelegate>

in my .m file

@interface LocationViewController () <CLLocationManagerDelegate>

Here is my code:

@implementation LocationViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self getCurrentLocation];
}

-(CLLocationCoordinate2D) getLocation{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
    CLLocation *location = [locationManager location];
    CLLocationCoordinate2D coordinate = [location coordinate];
    return coordinate;
}

- (void)getCurrentLocation{
    CLLocationCoordinate2D coordinate = [self getLocation];
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
    NSLog(@"Latitude  = %@", latitude);
    NSLog(@"Longitude = %@", longitude);
}

Upvotes: 3

Views: 1878

Answers (2)

itsji10dra
itsji10dra

Reputation: 4677

Refer this answer. Hope, this helps.

Make this changes :

-(CLLocationCoordinate2D) getLocation{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager requestWhenInUseAuthorization];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
CLLocationCoordinate2D coordinate = [location coordinate];
return coordinate;
}

 -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
     NSLog(@"Status : %d", status);
}

Goto Settings > Privacy > Location > Your App > Always

And see how 'Status' value gets changes.

Upvotes: 2

Fahim Parkar
Fahim Parkar

Reputation: 31647

Put below before startUpdatingLocation

#ifdef __IPHONE_8_0
if(IS_OS_8_OR_LATER) {
     // Use one or the other, not both. Depending on what you put in info.plist
    [self.locationManager requestWhenInUseAuthorization];
}
#endif
[self.locationManager startUpdatingLocation];

Also call [self getCurrentLocation]; in viewDidLoad & viewDidAppear both.

It will work.

Also make sure you have entry for requestWhenInUseAuthorization in info.plist file too.

check this for more info

Upvotes: 2

Related Questions