EXC_BAD_ACCESS при запуске простого приложения iPhone

Справочная информация:

Пробую выполнить задание "HelloPoly" в курсе CS193P. Я создал свой файл .xib и собственный класс контроллера.

Я не уточнял никаких методов - я разрешил IB только записывать файлы классов в xcode.

Проблема:

Каждый раз, когда я запускаю приложение, оно срывается. Когда я запускаю gdb, я вижу ошибку EXC_BAD_ACCESS. Это означает, что я обращаюсь к чему-то несуществующему в памяти, верно? Дело в том, что все, что у меня есть, это файлы по умолчанию, созданные IB, и файл main. Больше ничего.

Я проверил опубликованные решения кода, чтобы увидеть, в чем отличие, и я не уверен, что попробовать дальше. Что вы, ребята, обычно проверяете, когда ваше приложение вылетает каждый раз при запуске?

Трассировка стека показывает, что это происходит в main.m при создании UIApplicationMain, то есть я никогда не дохожу до своего делегата приложения.

Вот след:

Program received signal:  “EXC_BAD_ACCESS”.
(gdb) where
#0  0x01b70d45 in CFHash ()
#1  0x01b741cf in __CFDictionaryFindBuckets1b ()
#2  0x01b72b0a in CFDictionaryGetValue ()
#3  0x00450535 in -[UIProxyObject initWithCoder:] ()
#4  0x0133886e in UINibDecoderDecodeObjectForValue ()
#5  0x013398c2 in -[UINibDecoder decodeObjectForKey:] ()
#6  0x00450b35 in -[UIRuntimeConnection initWithCoder:] ()
#7  0x0045101c in -[UIRuntimeEventConnection initWithCoder:] ()
#8  0x0133886e in UINibDecoderDecodeObjectForValue ()
#9  0x0133820a in UINibDecoderDecodeObjectForValue ()
#10 0x013398c2 in -[UINibDecoder decodeObjectForKey:] ()
#11 0x0044feab in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
#12 0x00451fcb in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
#13 0x002910a6 in -[UIApplication _loadMainNibFile] ()
#14 0x0029a82a in -[UIApplication _runWithURL:sourceBundleID:] ()
#15 0x00297b88 in -[UIApplication handleEvent:withNewEvent:] ()
#16 0x002936d3 in -[UIApplication sendEvent:] ()
#17 0x0029a0b5 in _UIApplicationHandleEvent ()
#18 0x0239eef1 in PurpleEventCallback ()
#19 0x01bb2b80 in CFRunLoopRunSpecific ()
#20 0x01bb1c48 in CFRunLoopRunInMode ()
#21 0x00291e69 in -[UIApplication _run] ()
#22 0x0029b003 in UIApplicationMain ()
#23 0x000026a8 in main (argc=1, argv=0xbffff000) at main.m:14

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

Идеи?

Спасибо.


person madchedar0    schedule 07.02.2010    source источник
comment
проверьте, вызывается ли метод viewDidLoad путем установки точки останова, чтобы узнать, вылетает ли приложение еще до этого   -  person Nithin    schedule 08.02.2010


Ответы (3)


Он дает сбой в NibDecoder, то есть при загрузке файлов XIB. Вероятно, у вас есть ссылка на объект или свойство, которые не существуют или не инициализированы.

person Jakob Borg    schedule 07.02.2010
comment
Итак, все вызовы UIProxyObject, CFDictionary и CFHash поддерживают UINibDecoder. Я надеюсь, что смогу установить разрывы / распечатать значения UINibDecoder и посмотреть, к чему он обращается. Иногда это все .asm-код. Я сообщу, когда у меня будет возможность попробовать это. Спасибо, спокойствие и Хоанг. - person madchedar0; 08.02.2010
comment
Я был в отчаянии и начал удалять части своего пера, пока он не перестал ломаться. Я удалил кнопки, ярлыки и т. Д., Пока он не стал пустым. Он все равно разбился! Я только что удалил свой объект «Контроллер», поэтому у меня были только первый ответчик, окно, владелец файла и делегат приложения. Это сработало! Так что что-то, должно быть, было странным с объектом «Контроллер», который я использовал. Я собираюсь начать с нуля (пустой обзор) и посмотреть, что произойдет. Как только я выясню, что сделал не так, я обновлю этот пост. - person madchedar0; 15.02.2010
comment
Я снова построил все с нуля в своем настраиваемом объекте контроллера, и я обошел стороной то, что убивало меня в прошлый раз. Каждое внесенное мной изменение я компилировал и запускал в симуляторе iPhone, чтобы убедиться, что я не спотыкаюсь. Я думаю, что мои подключения к моему объекту Controller, должно быть, были неправильными, и я делал что-то еще. Итак, извлеченный урок заключается в том, что компилируйте и много тестируйте при создании макетов IB ... а не только при использовании xcode! - person madchedar0; 22.02.2010

Проверьте имя файла .xib и имя метода initByNibName, если они совпадают. Наверное, эти два имени разные.

person Hoang Pham    schedule 07.02.2010

Я просто решил это для аналогичного базового приложения для iPhone в учебнике по самообучению и понял, что я просто потерял @ после "вместо перед" - Мяу - это тот, который напутал (ниже), и этого было достаточно, чтобы бросить Ошибка:

animalSounds=[[NSArray alloc]initWithObjects: @"Oink","@Rawr",@"Ssss",@"Roof","@Meow",@"Honk",@"Squeak",nil];

Для отладки я использовал супер-базовый метод установки точек останова и вывода NSLog, так что я мог выяснить, какая из 4 переменных, которые я использовал, была испорчена.

person Alexander Shartsis    schedule 28.12.2010