iOS - Странное исключение - PullRequest
0 голосов
/ 19 марта 2012

Я получаю странное исключение в Xcode 4.2.1 (проект с поддержкой ARC), которое я не могу отследить до корня проблемы.

Вот как выглядит исключение:

2012-03-18 22:19:32.855 Project[14225:707] +[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4
2012-03-18 22:19:32.859 Project[14225:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4'

Что такое UIPickerTableViewTitledCell? Я предполагаю, что это некоторый внутренний класс для использования UIPickerView. Но я нигде не ссылаюсь на этот класс в моем проекте.

Мое приложение настроено как приложение панели вкладок с контроллером навигации на каждой вкладке, и эта конкретная вкладка имеет вид таблицы и окно выбора.

1 Ответ

3 голосов
/ 19 марта 2012

Звучит так, как будто у вас переизданный объект. Я получаю это, когда в пре-ARC-коде релиз вызывается слишком много раз. Похоже, код ищет NSString для отправки isEqualToString:, но вместо того, чтобы получить NSString, которая уже была освобождена, он получает этот случайный экземпляр UIPickerTableViewTitledCell.

Я бы включил Зомби. В Xcode 4.2.1 вы можете найти его в пункте меню Product > Edit Scheme. Перейдите на вкладку Diagnostics. Тогда есть флажок Enable Zombie Objects. Это превратит ваш переизданный объект в зомби, так что вы сможете точно определить, какой объект вызывает ваш сбой.

Я бы прочитал Техническую ноту Apple doc TN2239: Магия отладки iOS для получения более подробной информации по этому вопросу. Весь документ отличный, но вы можете начать с чтения разделов "Зомби!" и "Больше зомби!"

...