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