Исключение при работе на симуляторе 3.2 - PullRequest
0 голосов
/ 24 июня 2010

Я тестирую свое приложение на симуляторе 3.1.3, оно работает нормально. Когда дело доходит до симулятора 3.2, он падает с самого начала:

2010-06-24 16:35:29.208 MyTestApp[6991:207] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'
2010-06-24 16:35:29.213 MyTestApp[6991:207] Stack: (
46195275,
2520474889,
46194715,
46194554,
6387912,
6392266,
5568184,
6388086,
6386450,
6392266,
5564974,
5573454,
3555255,
3560368,
3586056,
3567777,
3599431,
52998524,
45735996,
45731912,
3559044,
3591649,
10824,
10678

)

Насколько я знаю, я не использую метод "initWithCoder" (хотя на самом деле не знаю, что это такое).

Как я могу узнать, где выдается исключение, чтобы лучше понять причину проблемы?

ps: я добавил исключение в Breakpoint: objc_exception_throw (с местоположением libobjc.A.dylib, как ни странно, мне пришлось вводить местоположение вручную, я ожидал, что xcode найдет его для меня, когда я добавлю objc_exception_throw). Но все тот же след и больше никакой информации.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Я выяснил причину этой ошибки. Я создал объект типа NSDictionnary в IB, и кажется, что это не правильный способ сделать это. Вместо этого я программно создал этот же объект в XCode, и это прекрасно работает. Похоже, это была какая-то постоянная проблема.

1 голос
/ 24 июня 2010

Эта страница должна содержать полезную информацию: Советы по отладке для Objective-C

Особый интерес представляет консольная команда info line *. Каждый из этих номеров, перечисленных в журнале исключений, является адресом в стеке. Те нижние в диапазоне 10000 и ниже обычно расположены, например, в основном методе приложения. Адреса с наивысшим рейтингом обычно представляют библиотеки по умолчанию.

Использование команды info line *10678, скорее всего, вернет некоторую информацию о конкретной строке в методе main, что не очень помогает. Обычно хитрость заключается в том, чтобы найти самый высокий адрес до начала работы библиотек по умолчанию. Я не уверен, насколько это поможет вашей проблеме, в частности, поскольку существует огромный разрыв между ожидаемыми маленькими адресами и следующим наивысшим. В любом случае, начните с наименьшего адреса выше двух нижних (3555255 из того, что я вижу в журнале, который вы разместили) и посмотрите, возвращает ли он строку из одного из ваших собственных файлов кода. Если это так, проверяйте тот, что находится над ним, и так далее, пока не найдете последний адрес из своего собственного кода. Надеюсь, это поможет.

...