Устранение неполадок загадочного EXC_BAD_ACCESS в приложении IOS - PullRequest
0 голосов
/ 03 ноября 2011

Когда я запускаю свое приложение IOS (на симуляторе IPad или на реальном устройстве), я получаю ошибку EXC_BAD_ACCESS.Обычно у меня не возникло бы проблем с устранением неполадок, но эта ошибка возникла глубоко внутри самой системы, и после поиска я застрял, как приступить к устранению неполадок.

Может кто-нибудь дать мне несколько идей о том, чтопроисходит или как это устранить?Я работаю с огромным проектом и без какого-либо указания из сообщения об ошибке не знаю, с чего начать.

Спасибо!

#0  0x0230609b in objc_msgSend ()
#1  0x0206943d in CFRetain ()
#2  0x0214e9c0 in +[__NSArrayI __new::] ()
#3  0x020a200a in -[__NSPlaceholderArray initWithObjects:count:] ()
#4  0x009aa2dc in -[CALayerArray copyWithZone:] ()
#5  0x02164bd9 in -[NSObject copy] ()
#6  0x016bb0fa in -[UIView dealloc] ()
#7  0x02306e4d in _objc_rootRelease ()
#8  0x0206e435 in CFRelease ()
#9  0x0214fe94 in -[__NSArrayM dealloc] ()
#10 0x02306e4d in _objc_rootRelease ()
#11 0x02306e10 in objc_release ()
#12 0x02307c60 in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#13 0x02096ed8 in _CFAutoreleasePoolPop ()
#14 0x012619f9 in -[NSAutoreleasePool release] ()
#15 0x0168af78 in _UIApplicationHandleEvent ()
#16 0x035dffa9 in PurpleEventCallback ()
#17 0x021361c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#18 0x0209b022 in __CFRunLoopDoSource1 ()
#19 0x0209990a in __CFRunLoopRun ()
#20 0x02098db4 in CFRunLoopRunSpecific ()
#21 0x02098ccb in CFRunLoopRunInMode ()
#22 0x016872a7 in -[UIApplication _run] ()
#23 0x01688a9b in UIApplicationMain ()
#24 0x0020f2a4 in main at /..../main.m:17

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Мое первое предположение было бы, что вы выпускаете представление, которое уже автоматически выпущено.Например:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.view addSubview:myButton]
[myButton release];

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

Если возможно, вы можете рассмотреть вопрос о переносе проекта в ARC, поскольку он решает большинство (но не все!) Из этих проблем.В противном случае, лучше всего отладить его, вероятно, #ifdef из частей вашего кода до тех пор, пока сбой не исчезнет, ​​а затем вернуть код обратно до его повторного сбоя.

1 голос
/ 03 ноября 2011

Из трассировки стека вы можете получить следующее:

1) Это связано с пулом автоматического выпуска

2) Выпускается массив

3)Я полагаю, что массив содержит некоторые UIViews (возможно)

4) Как часть UIView dealloc, что-то идет ужасно неправильно

Это не так полезно, извините:)

autorelease в начале трассировки стека говорит вам, что почти наверняка вы что-то недостаточно сохранили:)

Есть ли какое-то конкретное представление, в котором возникает эта ошибка?

...