Акселерометр iPhone вылетает из приложения

У меня есть навигационное приложение, в котором я хочу использовать акселерометр для обнаружения сотрясения и запуска прокрутки на следующую страницу. Я добавил код акселерометра в контроллер представления моего scrollView, и он отлично работает; встряска вызывает мой метод смены страницы. Но когда я выгружаю scrollViewController из стека навигации, приложение вылетает.

Я устанавливаю акселерометр в методе viewDidLoad для scrollViewController и реагирую на встряску в акселерометре: didAccelerate: метод делегата.

Когда scrollViewController освобождается, приложение аварийно завершает работу.

Что мне не хватает?

Спасибо


person Alpinista    schedule 18.06.2009    source источник
comment
Как вы переключаете страницы? Вы освобождаете свой единственный контроллер представления, а затем выделяете новый?   -  person ryansstack    schedule 18.06.2009
comment
Можете ли вы показать часть, где вы настраиваете акселерометр? Также был бы полезен метод Dealloc вашего viewController.   -  person Jab    schedule 18.06.2009


Ответы (4)


Нашел ответ в другой теме:

Как вы выпускаете экземпляр общего ускорителя на айфон?

Мне нужно было установить делегат акселерометра на ноль, когда мой scrollView освободился. Акселерометр — это синглтон, который сохраняет ссылку на свой делегат, в данном случае на мой scrollViewController. Когда мой scrollViewController выскочил из стека, ссылка осталась висящей, что привело к сбою приложения.

Спасибо Филу Нэшу за ответ!

person Alpinista    schedule 18.06.2009

Какая у вас частота обновления акселерометра? Я слышал о странных вещах, происходящих, если он слишком высок.

person Nosredna    schedule 18.06.2009
comment
В ПОРЯДКЕ. Это безопасный номер. Я слышал, что у людей иногда случаются сбои, когда частота превышает 100 герц. - person Nosredna; 18.06.2009

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

person JuniorFlip    schedule 18.06.2009

Просто: установив метод делегата, вы сообщили другому объекту (акселерометру), что прокрутка существует.

Но сказали ли вы ему, когда он перестал существовать, чтобы он не мог не посылать ему никаких сообщений?

Думаю, нет. Вам нужно снова установить делегата, на этот раз на ноль.

person Alex Brown    schedule 18.06.2009