iPhone: ошибка «Неопознанный селектор отправлен в экземпляр»

Я пытаюсь реализовать модальное частичное наложение в своем приложении с помощью кода из «Полумодальных (прозрачных) диалогов на iPhone» на ramin.firoozye.com. Функциональность наложения работает, и она выдвигает модальное окно в поле зрения, но вызов любого IBAction из контроллера модального окна вызывает сбой «Неопознанный селектор отправлен в экземпляр».

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

Я уверен, что мне просто не хватает чего-то простого здесь. Любая помощь будет принята с благодарностью.


person Cuzog    schedule 03.06.2010    source источник


Ответы (1)


При отображении вашего ModalViewController в TestViewController displayModal: вы освобождаете свой modalController (строка 20). Не делайте этого - вам нужен ViewController, чтобы остаться в живых. Если вы отпустите его, останется живым только представление (поскольку оно сохраняется при добавлении в качестве подвида).

Кроме того, в ModalViewController hideModalEnded вы освобождаете modalView, который вы не сохранили, поэтому я бы удалил и его.

Итак, теперь вам нужно выпустить только экземпляр ModalViewController после удаления представления. Вы можете сделать это с помощью [самоосвобождения]; в hideModalEnded, но это кажется необычным шаблоном, и я не чувствую себя хорошо, делая это.

Некоторые предложения:

  • Держите методы show и hide в одном классе.
  • Держите ивар рядом с контроллером.
  • Другая возможность: полностью удалить ModalViewController и поместить все в TestViewController. Но это очень сильно зависит от того, сколько действий будет происходить в реальности.
person Eiko    schedule 03.06.2010
comment
Ха! Это было просто. Спасибо, что сэкономили мне часы отладки! - person Cuzog; 04.06.2010
comment
То же тестовое приложение, новая ошибка. Не уверен, что это связано с выпуском, но если вы откроете модальное окно и снова закроете его 7 раз, то в 8-й раз произойдет сбой приложения. Отладчик показывает EXC_BAD_ACCESS. - person Cuzog; 04.06.2010
comment
Извините, перепутал представление и контроллер, и релиз ускользнул... Я понятия не имею, почему он постоянно терпит неудачу в 8-м воплощении. - person Eiko; 04.06.2010
comment
Спасибо за продолжение! [самовыпуск] исправляет это. Я предполагаю, что представление не очищалось из памяти, и после того, как накопилось достаточно просмотров, оно рухнуло. В моем реальном приложении представление вышло из строя после 3 раз, потому что модальное окно содержит гораздо больше элементов. Вы упомянули, что лучший способ сделать это - поместить методы show и hide в один и тот же класс. Я хотел бы сделать это, но не знаю, как подключить метод скрытия к кнопке закрытия, когда он присутствует в отдельном файле xib. Этот модальный вид довольно сложен в реальном приложении, поэтому ему нужен собственный контроллер и xib. Еще раз спасибо! - person Cuzog; 04.06.2010