Что вызывает (и как я могу исправить) эту странную ошибку Core Location? - PullRequest
15 голосов
/ 24 февраля 2011

ERROR, Generic, время, +320195751,128, функция, "пустота CLClientHandleRegistrationTimerExpiry (__ CFRunLoopTimer *, void *) ", Таймер регистрации истек, но клиент все еще регистрируется!

Есть только несколько упоминаний об этой проблеме, которые мне удалось найти в более широком Интернете, и ни у кого нет полезной информации. Вот контекст:

У меня есть приложение, которое отслеживает местоположение устройства с помощью метода startUpdatingLocation в CLLocationManager. Он начинает мониторинг, работает некоторое время, затем это сообщение появляется в выходных данных отладки. С этого момента обновления местоположения не доставляются.

Эта ошибка убивает функциональность определения местоположения приложения, и я не знаю, что может быть причиной этого. У него даже есть восклицательный знак в конце, что означает, что это явно захватывающая ошибка.

Обновление:
Хотя я так и не нашел решения проблемы и не выяснил, почему это происходит в первую очередь, я также потерял способность воспроизводить ее. Похоже, это произошло в течение некоторого периода времени, в течение которого я сделал много вещей, включая общее изменение структуры кода с последующим обновлением до бета-версии iOS 5. Кажется, что-то заставило меня замолчать.

Ответы [ 7 ]

2 голосов
/ 14 июня 2011

Вы реализовали

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 

и это ловит это?

Вам нужно проверить kCLErrorNetwork, kCLErrorDenied, kCLErrorHeadingFailure и kCLErrorLocationUnknown в обычном режиме, но мне интересно, есть ли другие ошибки, которые делегат все еще может перехватить?

Это может дать вам возможность остановить, а затем перезапустить службы определения местоположения.

1 голос
/ 02 марта 2011

Исходя из того, чем @schillace должен был поделиться, возможно ли, что вы пытаетесь принудительно обновлять местоположение, не обращая внимания на статус авторизации пользователя?

Старайтесь не звонить -startUpdatingLocation, пока не узнаете, что [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized.

0 голосов
/ 16 августа 2011

Я получил это при реализации тайм-аута (выполнение селектора после задержки) в LocateMe, мой предыдущий код использовал другой метод.Я не знаю, является ли это ключом.

0 голосов
/ 16 июня 2011

Я получил ту же ошибку и понял, что это потому, что я забыл упомянуть, что класс реализует CLLocationManagerDelegate в файле .h.

Добавление CLLocationManagerDelegate в файл заголовка и следующая строка, указывающая на делегата, решило для меня ошибку.

locationManager.delegate = self;
[locationManager startUpdatingHeading];
0 голосов
/ 13 июня 2011

Вы делаете материал о местоположении в главном потоке?У меня были всевозможные странные проблемы с вызовами API CLLocation из фонового потока.Я перенес пару основных звонков в основной поток, затем все заработало.

0 голосов
/ 02 июня 2011

Вы уверены, что это проблема? Мне кажется, что вы выполняете отладку до точки останова (фактически приостанавливая работу приложения) до завершения регистрации в диспетчере местоположений. Тем временем таймер истекает, и вы еще не закончили регистрацию. Если вы уберете контрольные точки, появится ли это сообщение?

0 голосов
/ 02 марта 2011

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

Итак ... моя теория состоит в том, что если вы делаете вызов, который заставляет менеджера местоположения отображать диалоговое окно "приложение хочет ваше местоположение", а затем вы продолжаете совершать вызовы, пока этот диалог открыт, вы получите эту ошибку.Как только я подтвердил диалог и перезапустил программу, я больше не видел эту ошибку.

Надеюсь, это поможет, это всего лишь предположение.

...