2015-03-26 3 views
3

Мое приложение Xcode, которое я разрабатываю, должно получить широту и долготу устройства iOS пользователей. Хотя в настоящее время все, что я получаю, равно 0 для обоих значений. Он не запрашивает разрешения на местоположение, и я нахожусь на настоящем устройстве, а не в симуляторе.Текущее местоположение, возвращаемое 0

NSLocationAlwaysUsageDescription в моем info.plist

Я также импортирован CoreLocation и в моем файле .h

@interface LocationViewController : UIViewController <CLLocationManagerDelegate> 

в моем файле .m

@interface LocationViewController() <CLLocationManagerDelegate> 

Вот мой код:

@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); 
} 
+0

который iOS? Я считаю, что вы тестируете iOS 8 и выше ... верно? –

+0

Да iOS 8.2, спасибо :) –

ответ

2

См этот answer. Надеюсь это поможет.

Сделать это изменения:

-(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); 
} 

Гото Настройки> Конфиденциальность> Местоположение> Ваш App> Всегда

И посмотреть, как значение 'Status' получает изменения.

+0

Отлично, что сработало! Как мне заставить приложение запрашивать разрешение на размещение, поэтому мне не нужно менять его в настройках? –

+0

Добавьте 'NSLocationAlwaysUsageDescription' в свой info.plist. – itsji10dra

2

Помещенный ниже перед 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]; 

Также называют [self getCurrentLocation]; в viewDidLoad & viewDidAppear обоих.

Он будет работать.

Также убедитесь, что у вас есть запись для requestWhenInUseAuthorization в файле info.plist.

check this for more info

+0

Пробовал и получил ошибку в выражении if. Я прокомментировал оператор if и сохранил [self.locationManager requestWhenInUseAuthorization]; но все равно возвращает 0. Также добавьте, как вы сказали в viewdidload/viewdidappear –

+0

@ DanWinter-Wijntjes: проверьте [здесь] (http://stackoverflow.com/questions/26356558/mapkit-giving-wrong-lat-lang-ios-8/26361534 # 26361534) что я делаю .. Это сработает ... –

+0

@ DanWinter-Wijntjes: проблема решена? –

Смежные вопросы