[__NSCFString setView:]: нераспознанный селектор отправлен экземпляру 0x8292720

У меня есть searchBar и searchDisplayController, помещенные в панель вкладок, которая является основной панелью вкладок.
Когда я открываю новый контроллер просмотра, нажимая, проблем нет.

mainTabbar -> navigationController+searchController -(push after rowdidselect)-> newVC -(push)-> newVC -(push)-> ...

Но когда я делаю настоящее модальное.

mainTabbar -> navigationController+searchController -(нажать после rowdidselect)-> newVC -(modal)-> newVC

Затем вернитесь к результату поиска

mainTabbar -> Контроллер навигации+Контроллер поиска

Я не могу снова нажать newViewController и получил эту ошибку:

[__NSCFString setView:]: unrecognized selector sent to instance 0x8292720

что со мной происходит? все результаты просто говорят мне о распознавании жестов.

:: после того, как я включил зомби, я получил это сообщение

-[UITapGestureRecognizer сохранить]: сообщение отправлено в освобожденный экземпляр 0xfcd83b0

Я предполагаю, что TapGestureRecognizer с ячейкой таблицы searchDisplayController освобожден. Кто-нибудь знает, как их сохранить???


person user1047504    schedule 17.02.2013    source источник


Ответы (1)


Вы действительно не предоставляете много информации о своем случае, но в целом журнал ошибок:

[__NSCFString setView:]: unrecognized selector sent to instance 0x8292720

означает, что вы пытаетесь отправить сообщение setView не тому объекту типа NSString.

Поскольку вы говорите, что ваш код работает в одном случае, я предполагаю, что проблема не в том, что вы отправляете сообщение не тому объекту. Скорее, это связано с освобождением соответствующего объекта и повторным использованием его памяти для объекта NSString (который затем получает сообщение).

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

person sergio    schedule 17.02.2013
comment
для модального режима я использую rejectmodalViewController для push-pop. Я использую rejectViewController, чтобы закрыть ViewController:: после того, как я включу зомби, я получил это сообщение - [UITapGestureRecognizer keep]: сообщение отправлено освобожденному экземпляру 0xfcd83b0 - person user1047504; 17.02.2013
comment
что ж, это подтверждает мою гипотезу. не могли бы вы показать, как и где вы создаете распознаватель жестов? я предполагаю, что ваш контроллер (содержащий распознаватель жестов) освобожден, но прикрепленное к нему представление остается там (оно не удаляется из своего суперпредставления), поэтому оно продолжает отправлять сообщения распознавателю... но не видит больше код, больше ничего не могу сказать... - person sergio; 17.02.2013
comment
Для push-pop, почему вы закрываете контроллер представления с помощью «dismissViewController» вместо «popViewControllerAnimated:»? - person Reno Jones; 17.02.2013
comment
@RenoJones: +1, я полностью следил за этим! это, безусловно, неправильно, хотя кажется, что push/pop работает правильно для OP... - person sergio; 17.02.2013
comment
RenoJones, хорошо, я сейчас это исправлю. @sergio Я не создаю GestureRecognizer. Я просто использую didSelectRowAtIndexpath, и он падает после того, как сделал все в этом методе. - person user1047504; 17.02.2013
comment
@RenoJones Нет, пока не нравится. T^T Проблема осталась. Я предполагаю, что моя проблема заключается в том, что когда я вызываю модальное представление, распознаватели жестов по умолчанию в табличном представлении searchDisplayController освобождаются. Но я не знаю, как их сохранить. Могу ли я переопределить их? или Могу ли я отключить их, если didselectrowatindexpath все еще работает? или еще.... - person user1047504; 17.02.2013
comment
Подождите, кажется, вы делаете слишком много, когда требуется немного: просто измените свой пост выше с помощью кода, который вы получили в 'didselectrowatindexpath'. Просто опубликуйте все. - person Reno Jones; 17.02.2013
comment
Решено: проблема связана с распознавателем жестов IB в newVC. Я только перемещаю их из IB в код. распознаватель жестов по умолчанию в ячейке таблицы в searchDisplayController вообще недоступен. - person user1047504; 17.02.2013