TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION ошибка разработки iPhone SDK - PullRequest
0 голосов
/ 25 января 2009

У меня есть рабочая программа, написанная другим программистом, к которому я пытаюсь добавить некоторые функции, чтобы изучить iPhone SDK. Я выполнил то, что, как я полагаю, было довольно простой задачей добавления дополнительного UIButton к существующему представлению с подобными кнопками. Я использовал другие кнопки UIB в качестве модели, и, похоже, это должно быть простой задачей.

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

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

Ответы [ 5 ]

1 голос
/ 10 апреля 2009

Это исключение, сгенерированное средой выполнения Objective C. Нажмите CMD-SHIFT-R, чтобы открыть консоль отладчика. Вы увидите всю информацию о запуске GDB в нижней части окна, но если прокрутить до стека информацию, вы получите что-то, что должно выглядеть так:

[Session started at 2009-04-09 14:39:27 -0700.]
2009-04-09 14:39:31.246 LearnGLES[10415:20b] *** -[EAGLContext fakeMessage]: unrecognized selector sent to instance 0x528150
2009-04-09 14:39:31.248 LearnGLES[10415:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EAGLContext fakeMessage]: unrecognized selector sent to instance 0x528150'
2009-04-09 14:39:31.250 LearnGLES[10415:20b] Stack: (
     2517758219,
     2486509115,
     ....

Это всего лишь пример полного исключения, которое я создал, изменив код для отправки несуществующего сообщения объекту, но есть много возможностей относительно того, что может быть вашим. Все, что может привести к возникновению исключения во время выполнения в любой из сред Objective-C, может быть виновником (неразборчивые даты в формататоре даты, недопустимые сообщения для объектов и т. Д.)

1 голос
/ 26 января 2009

Если вы хотите перехватить исключение, когда оно происходит, вы можете отследить его в отладчике. Полезный набор точек останова для использования при отладке приложений Cocoa: objc_exception_throw и - [NSException повышение]. Я думаю, что в iPhone все исключения проходят через objc_exception_throw, но если вы нацеливались на Tiger или более раннюю версию, вы должны установить точку останова на обоих.

Есть больше методов отладки на http://www.cocoadev.com/index.pl?DebuggingTechniques.

1 голос
/ 25 января 2009

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

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

Это хорошая статья о отладке в Objective-C .

0 голосов
/ 28 января 2009

У меня была похожая проблема, когда я выпускал вещи, которые я не выделил явно. В моем случае у меня было фоновое изображение UIImage * image = [UIImage ...], и я установил его в качестве фона моего UIButton, а затем сделал [выпуск изображения]; Вы не хотите делать [релиз изображения]: UIButton теперь владеет им, и он освободит его, когда он больше не нужен. Может быть, у вас есть похожая проблема?

0 голосов
/ 26 января 2009

Какие соединения вы установили в конструкторе интерфейсов? Вы делаете вызов любым методам, когда кнопка нажата? Что такое сигнатура метода в этом случае? Вносили ли вы какие-либо изменения в исходный код, где вы могли случайно удалить какой-то важный код. Это поможет, если вы разместите какой-то код. Исключение очень общее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...