У меня возникла странная проблема с расположением на iPhone. Он выглядит просто сумасшедшим, но он кажется воспроизводимым. В моем приложении я использую Core Location для получения данных о местоположении для некоторых действий пользователя. Обычно это работает. Но в самом первом запуске после того, как приложение было развернуто на устройстве без предыдущей версии (не имеет значения с XCode или через iTunes), оно вообще не работает. Ни
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
ни
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
называются. Я даже не получаю координаты сотовых вышек. Единственный знак, который работает GPS, - это всплывающее окно, которое просит разрешить доступ к данным о местоположении. Если я уйду из приложения (и, бросив, я имею в виду, что я действительно убиваю его, а не просто помещаю в фоновый режим), при следующем запуске все обычно начинает работать нормально.iPhone Location Данные не работают при первом запуске
Дополнительная информация. Как мне нужно получить местоположение, где пользователь делает определенные действия, я использую следующий подход:
- я использую тот же общий
CLLocationManager
объект (сkCLLocationAccuracyBest
) и тем же общим объект делегата. - Когда пользователь выполняет действие, я вызываю
startUpdatingLocation
и создаю фоновый поток, в основном таймер, но есть что-то еще не связанное. Он просыпается один раз каждые 15 секунд. - Я аккумулирую исправления, полученные
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
- Когда фоновый поток пробуждается, он проверяет исправления и время. Если есть достаточно хорошее исправление, оно перестает ждать. Если интервал времени в 1 минуту превышен, он также перестает ждать.
- «Остановка ожидания» = вызов какого-либо метода. Этот метод ищет лучшее исправление среди полученных (если есть) и обрабатывает его. Также он называет
stopUpdatingLocation
Я не вижу никаких очевидных недостатков таким образом. И более того, тот же самый двоичный файл обычно начинает работать во втором запуске. Любые идеи почему? Я сошел с ума?
Когда вы запускаете приложение во второй раз, есть ли всплывающее окно? Если нет, в вашем коде может возникнуть какое-то состояние гонки, которое будет вызвано этим всплывающим окном. –
Я подумал об этом, но это, похоже, не связано. iPhone запоминает реакцию пользователей на разрешениях и сохраняет их по умолчанию после нескольких одинаковых ответов. Исправления не получаются даже без такого всплывающего окна (при первом запуске). – SergGr