2016-09-28 2 views
0

Я пытаюсь получить доступ к местоположению пользователя, чтобы отображать данные о погоде. Я использую этот код:Я не могу получить данные о местоположении после разрешения

if(self.locationManager == nil) { 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
} 

// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
    NSLog (@"ENTERING requestWhenInUseAuthorization",nil); 
    [self.locationManager requestAlwaysAuthorization]; 
} 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[self.locationManager startUpdatingLocation]; 

CLLocation *location = [self.locationManager location]; 
[self.locationManager stopUpdatingLocation]; 
NSString *latitude = [[NSNumber numberWithDouble:location.coordinate.latitude] stringValue]; 
NSString *longitude = [[NSNumber numberWithDouble:location.coordinate.longitude] stringValue]; 

Дело в том, что я получаю всплывающее окно с просьбой разрешить использовать текущее местоположение. Я принимаю, но я не получаю никакого места, его значение равно nil. Когда я перехожу к настройкам, он говорит, что у меня есть разрешение на доступ к данным, но я не получаю его, если я не закрою приложение и не открою его снова. Есть ли способ получить местоположение на данный момент? Я что-то делаю неправильно?

+0

Вы должны определить 'CLLocationManagerDelegate' и дождаться обновления местоположения (в методе' locationManager: didUpdateLocations: '). Этот метод будет называться несколько раз, каждый с большей точностью. ** Там ** вы хотите получить экземпляр 'CLLocation'. –

ответ

1

Вы пытаетесь получить доступ к местоположению слишком рано. Вам необходимо реализовать метод делегата locationManager:didUpdateLocations:. Он будет вызываться, когда доступно место.

Если вы хотите только одно местоположение, вы можете вызвать stopUpdatingLocation внутри метода делегата.

+0

, который сработал! Могу ли я спросить, есть ли что-то подобное для календаря, после запроса разрешения на доступ к календарю я хочу отображать события календаря, но они не будут отображаться, если я не выйду из представления и не вернусь к нему снова. – Lara

+0

Это совершенно другой вопрос. Я бы предложил опубликовать новый вопрос со всем соответствующим кодом и информацией об этой проблеме. – rmaddy

+0

Прошу прощения за то, что я уже сделал, и большое вам спасибо за вашу помощь. http://stackoverflow.com/questions/39772054/how-to-know-when-calendar-finishes-loading – Lara

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