Какие причины (и как я могу исправить) эту нечетную ошибку Core Location?
ERROR, Generic, время, 320195751.128, функция, "пустота CLClientHandleRegistrationTimerExpiry (__ CFRunLoopTimer *, void *)", истек таймер регистрации, но клиент все еще регистрируется!
Есть только несколько упоминаний об этой проблеме, которые я смог выкопать в более широком Интернете, и никто не имеет полезной информации. Здесь контекст:
У меня есть приложение, которое отслеживает местоположение устройства с помощью метода CLUocationManager startUpdatingLocation. Он начинает мониторинг, работает некоторое время, затем это сообщение появляется на выходе отладки. С этого момента больше нет обновлений местоположения.
Эта ошибка убивает функциональность местоположения приложения, и я не понимаю, что может вызвать ее. У него даже есть восклицательный знак в конце, что означает, что это явно захватывающая ошибка.
Update:
Хотя я и не нашел решения проблемы или не понял, почему это происходит в первую очередь, я также потерял способность воспроизводить ее. Это, похоже, произошло в течение некоторого периода времени, когда я делал много вещей, включая общее изменение структуры кода, за которым следует обновление бета-версии iOS 5. Кажется, что-то там заставило меня замолчать.
Ответы
Ответ 1
Вы реализовали
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
и это уловит?
Вам нужно проверить для kCLErrorNetwork, kCLErrorDenied, kCLErrorHeadingFailure и kCLErrorLocationUnknown в обычном прогоне, но мне интересно, есть ли еще ошибки, которые делегат может поймать?
Это может дать вам возможность остановить и затем перезапустить службы определения местоположения.
Ответ 2
Отключение того, что должен был предоставить @schillace, возможно ли, что вы пытаетесь принудительно обновлять местоположение, не прислушиваясь к статусу авторизации пользователя?
Попробуйте приостановить вызов -startUpdatingLocation
, пока не узнаете, что [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized
.
Ответ 3
Я не знаю, является ли это ответом или нет, но вот подсказка... Я работаю с assetFromURL, и я получаю прерывистые сбои в загрузке изображений из библиотеки активов. Поэтому я написал немного кода для тестирования теории, которая очень быстро загружает каждый URL-адрес в библиотеке. Я начал эту ошибку с этим кодом.
Итак... моя теория заключается в том, что если вы делаете вызов, который заставляет диспетчер местоположений показывать диалог "приложение хочет ваше местоположение", а затем вы продолжаете делать звонки, пока этот диалог вверх, вы получите эту ошибку. Как только я подтвердил диалог и перезапустил программу, я больше не видел эту ошибку.
Надеюсь, что это поможет, это просто догадка.
Ответ 4
Вы уверены, что это проблема? Мне кажется, что вы отлаживаете точку останова (фактически приостанавливаете приложение) до завершения регистрации в менеджере местоположений. Между тем, таймер истекает, и вы еще не закончили регистрацию. Если вы вынимаете точки останова, появляется ли сообщение?
Ответ 5
Вы делаете материал местоположения в основном потоке? У меня были всевозможные проблемы с бизаррой с вызовами CLLocation API из фонового потока. Я переместил несколько ключевых вызовов настройки в основной поток, тогда все сработало нормально.
Ответ 6
Я получил ту же ошибку и понял, что это произошло потому, что я забыл упомянуть, что класс реализует CLLocationManagerDelegate в файле .h.
Добавление CLLocationManagerDelegate в файл заголовка, и следующая строка, указывающая на то, что делегат решил ошибку для меня.
locationManager.delegate = self;
[locationManager startUpdatingHeading];
Ответ 7
Я получил это при реализации таймаута (выполнить селектор после задержки) в LocateMe, мой предыдущий код использовал другой метод. Я не знаю, является ли это ключом.