Сбой при использовании распознавателей жестов в StoryBoard - PullRequest
10 голосов
/ 27 января 2012

ОБНОВЛЕНИЕ

Это старый вопрос для старой версии Xcode.Оказалось, что проблема заключалась в ошибке в Xcode, которая была исправлена.

Оригинал

У меня есть раскадровка, созданная в результате создания нового приложения для вкладки iphone (с ARC)

Если на одной из моих вкладок перетащить распознаватель жестов (любой, но, скажем, панорамирование) на элемент управления, а затем установить селектор на действие, он просто вылетает, как только я иду наtab.

В консоли ничего нет - кажется, что это происходит во время загрузки раскадровки (viewDidLoad никогда не вызывается).

  1. Я не могу понять, какчтобы получить больше информации
  2. На другой вкладке это работает нормально.Обе вкладки были сгенерированы автоматически.

(возможно, я что-то испортил в представлении, но я не понимаю, что я сделал).

Если ясоздавать жесты программно, они работают нормально, но приятно, чтобы это работало в раскадровке, и я боюсь, что все, что не так, в какой-то момент вызовет сбой.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

В симуляторе я получаю

-[__NSCFString setView:]: unrecognized selector sent to instance 0x6d2db70

Опять же, нужны методы отладки - например, есть ли способ узнать, что такое объект 0x6d2db70?

Что точно так же, как этот вопрос (без ответа):

Распознаватель жестов в Интерфейсном конструкторе вылетает мое приложение

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Воспроизвести

  1. Новое приложение для iPhone с вкладками, ARC и раскадровку на
  2. . Перетащите жест касания на представление второй вкладки (работает на первой)
  3. Подключение селектора жестаПосле запуска # 3
  4. перейдите на вторую вкладку

Сбои.То же самое с моим приложением, вкладка по умолчанию работает, другие вкладки не

Ответы [ 2 ]

9 голосов
/ 28 января 2012

Сообщение об ошибке говорит нам, что программа отправляет сообщение setView: экземпляру __NSCFString (который, очевидно, является частным классом реализации NSString).

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

Если это не зомби, установите точку останова на -[NSObject doesNotRecognizeSelector:]. Когда достигается точка останова, вы можете определить проблему только по трассировке стека. Если нет, вы можете напечатать debugDescription объекта (что совпадает с description для большинства классов).

На симуляторе вы можете попросить отладчик напечатать debugDescription объекта следующим образом:

(gdb) frame 0
#0  0x013bcbff in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po ((int*)$ebp)[2]
this is my test string

На устройстве вы делаете это:

(gdb) frame 0
#0  0x344bca22 in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po $r0
this is my test string

Обновление

На основании ваших шагов по воспроизведению, это ошибка в UIKit. Подайте отчет об ошибке. Вы можете обойти ошибку, создав сильный выход в SecondViewController и подключив его к распознавателю жестов. Убедитесь, что вы установили розетку на ноль в viewDidUnload.

Обновление

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

2 голосов
/ 21 июня 2012

В моем случае, при автоматическом создании IBOutlet для распознавателя жестов путем перетаскивания в коде перетаскивания в коде Xcode правильно создал свойство с атрибутом «strong», но также добавил «set to nil» вviewDidUnload.Удаление "set to nil" решило проблему для меня.

...