9

я получаю NSInvalidArgumentException с разумом: -[UITapGestureRecognizer initWithCoder:]: unrecognized selector sent to instanceiOS5 Стабильная App сбоями в iOS4.3 Simulator

мое понимание, что UITapGestureRecognizers были поддержаны в ios4.x?

Можно ли загрузить другой файл xib для версий sub ios5?

+2

Они поддерживаются в 4.x, дело в том, что вы не можете просто оставить их в xib (я полагаю, это так). Вы не можете либо установить его в код, либо сделать еще один xib и загрузить его после проверки версии. – mit3z

+0

Проверьте [этот потенциально связанный вопрос] (http://stackoverflow.com/questions/6520932/uigesturerecognizer-in-uiview-object). Возможно, вам нужно создать экземпляр UITapGestureRecognizers по-другому. –

+0

Мне кажется, что ваш распознаватель становится освобожденным ... UIGestureRecognizer не отвечает на -initWithCoder: и именно поэтому он рушится. (Я думаю, что указатель deallocate на ваш объект UIGestureRecognoizer переносится другим объектом, который должен отвечать на initWithCoder: ...) –

ответ

17

Как отмечает @ mit3z в своем комментарии к исходному вопросу, iOS 4.3 поддерживает эту функцию только при настройке вручную с кодом. Интерфейс Builder не поддерживается.

Яблоко бы спасло нас от всего этого, если бы они просто добавили это как предупреждение о времени сборки.

+1

Это решило мою проблему. Чтобы быстро добавить GestureRecognizer через код, ознакомьтесь с ответом здесь: http://stackoverflow.com/questions/5954934/issue-with-a-uitapgesturerecognizer –

1

Я думаю, у вас есть объект NSCoding, который освобожден до аварии. UITapGestureRecognizer выделяется по его адресу, и когда исчезающий объект (но не его ссылка) пытается вызвать initWithCoder сам по себе, он фактически называет этот метод на вашем gestureRecognizer.

Тогда ваша проблема исходит от этого освобожденного объекта, но не от вашего gestureRecognizer.

Обязательно сохраните все свойства IBOutlet.

+0

Я действительно звоню на все IBOutlets. Я использую ARC ... – Andy

+0

Вы не можете использовать ARC и удерживать вызов. Если вы хотите сохранить компиляцию, вы не используете ARC. –

+0

Я бы предположил, что он означает, что он «силен», набрав или «сохраняя», набирая его свойства IBOutlet, а не называя удержание самих объектов. Если бы он фактически вызывал 'keep' с дугой, код не компилировался бы. – btomw