Иногда метод делегата акселерометра не вызывается
-
05-07-2019 - |
Вопрос
У меня есть приложение, которое использует акселерометр. Иногда приложение запускается без обновления данных акселерометра. Перезапуск приложения, иногда проблема сохраняется, иногда нет. И даже более странно, иногда я могу попробовать 10 раз, и все работает, как ожидалось. Это ошибка, или, может быть, я что-то упускаю. Отладка, этот код никогда не вызывается, когда акселерометр не обновляется:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration;
Есть идеи?
Решение
Я наконец-то нашел работу. Это известная ошибка. Таким образом, я нашел обходной путь, чтобы запустить поток и проверить, был ли вызван делегат акселерометра, если он есть, затем выйти из потока, если нет, установить делегат снова и повторно тестировать, пока делегат акселерометра вызывается. Я проверил это тщательно, и он работает без нареканий. Я надеюсь, что это будет решено в следующем обновлении iPhone OS.
Другие советы
У меня такая же проблема. Это случается, вероятно, 1/20 раз с приложением, которое я сделал из образца CrashLanding. После того, как я заметил это в своем приложении, я взял свежую версию Crashlanding, установил ее и, наконец, заставил запускаться при сбое акселерометра.
Я не знаю, как это исправить. Честно говоря, я ненавижу акселерометр ... по крайней мере, для управления играми: - \
Кроме того, акселерометр иногда выходил из строя при запуске «акселерометра» пример проекта.
Как уже упоминали другие, это известная ошибка; Я зарегистрировал ошибку с Apple (идентификатор ошибки Bug Reporter 6093028), возможно, другие также сделали это. Насколько я знаю, все приложения, использующие UIAccelerometer (включая примеры приложений Apple), страдают от этой проблемы, хотя частота встречаемости варьируется.
FWIW, мое приложение широко используется и использует акселерометр, и у меня никогда не было этой проблемы.
Мой вариант использования может отличаться от вашего: я включаю его только по запросу пользователя, задолго до запуска приложения.