Latidude и Longitude неверны при первом запуске приложения ios
Я использую CLLocationManager для получения текущего местоположения пользователя. Мне нужно текущее местоположение пользователя, потому что я использую Open Weather Api для отображения данных о погоде, где бы ни находился пользователь. Моя проблема в том, что когда я в первый раз открываю приложение, значения lat и long равны 0, 0. Но потом, если я снова запускаю приложение, оно работает нормально. Так что только при первом запуске приложения используются неверные значения lat и long. Я делаю все мои настройки в viewDiDLoad, вот код...
locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
[self->locationManager requestWhenInUseAuthorization];
[locationManager startUpdatingLocation];
Я не знаю, что я делаю не так. Это как-то связано с получением lat и long в контроллере представления вместо App Delegate?
Вот как я получаю значения местоположения:
locationManager.location.coordinate.latitude
locationManager.location.coordinate.longitude
2 ответа
Это происходит потому, что когда вы запускаете приложение в первый раз, диспетчер местоположений запрашивает у пользователя разрешение на доступ к текущему местоположению, а когда пользователь разрешает - процесс извлечения текущего местоположения занимает мало времени, и вы получаете доступ к координатам до завершения этого процесса.
Когда вы снова запускаете приложение, Менеджер местоположений обнаруживает, что вы уже дали разрешение, поэтому очень быстро дает вам координаты текущего местоположения.
Таким образом, решение заключается в том, что вы должны подождать, пока не завершится обновление местоположения. Вы можете установить некоторую задержку, используя диспетчеризацию ИЛИ можете использовать метод делегирования диспетчера местоположения didUpdateUserLocation ИЛИ, если ваш UIViewController не является первоначальным контроллером представления - в этом случае вы должны реализовать этот процесс в AppDelegate, используйте свой код в didFinishLaunching, поэтому, когда вы ' Я открою ваш контроллер вида (какой бы навигационный поток вы ни использовали), там будет информация о местоположении, потому что в это время менеджер местоположений будет отслеживать ваше местоположение.
Надеюсь, это поможет вам!
Вы должны проверить horizontalAccuracy
из CLLocation
Объект для отрицательного значения и не используйте значение широта / долгота, если это так. Весьма вероятно, что когда вы видите значения широты / долготы 0/0, GPS не обеспечил блокировку местоположения.