У меня странная ошибка. Я не уверен, как выследить. Я запускаю приложение в Simmulator 3.0. Он имеет три вкладки на tabBarcontroller, назовем их tab1, tab2 и tab3. Все три вкладки являются подклассом настраиваемой сгруппированной таблицы. Если я буду нажимать между вкладками 1 и 3 на неопределенный срок, нет никаких проблем. Однако, если я нажимаю с tab1 или tab3 на tab2 ровно пять раз, программа вылетает после нажатия на tab1 или tab3. У меня было два разных цепочек вызовов (в основном идентичны), когда я делаю это:Крушение программы при переключении между вкладками 5 раз
backtrace1:
objc[2988]: FREED(id): message release sent to freed object=0xfec100
Program received signal: “EXC_BAD_INSTRUCTION”.
(gdb) backtrace
#0 0x92a2dbfa in _objc_error()
#1 0x92a2dc30 in __objc_error()
#2 0x92a2c637 in _freedHandler()
#3 0x302042e8 in CFRelease()
#4 0x00370c31 in CALayerUpdateSublayers()
#5 0x0036f173 in -[CALayer dealloc]()
#6 0x0036100e in CALayerRelease()
#7 0x00369dad in CALayerFreeTransaction()
#8 0x003620b8 in CA::Transaction::commit()
#9 0x0036a2e0 in CA::Transaction::observer_callback()
#10 0x30245c32 in __CFRunLoopDoObservers()
#11 0x3024503f in CFRunLoopRunSpecific()
#12 0x30244628 in CFRunLoopRunInMode()
#13 0x32044c31 in GSEventRunModal()
#14 0x32044cf6 in GSEventRun()
#15 0x309021ee in UIApplicationMain()
#16 0x0000208a in main (argc=1, argv=0xbfffefbc) at /Users/johnbulcher/Documents/myApps/AnApp/main.m:14
backtrace2:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x92a3d688 in objc_msgSend()
#1 0x302042e8 in CFRelease()
#2 0x00370c31 in CALayerUpdateSublayers()
#3 0x0036f173 in -[CALayer dealloc]()
#4 0x0036100e in CALayerRelease()
#5 0x00369dad in CALayerFreeTransaction()
#6 0x003620b8 in CA::Transaction::commit()
#7 0x0036a2e0 in CA::Transaction::observer_callback()
#8 0x30245c32 in __CFRunLoopDoObservers()
#9 0x3024503f in CFRunLoopRunSpecific()
#10 0x30244628 in CFRunLoopRunInMode()
#11 0x32044c31 in GSEventRunModal()
#12 0x32044cf6 in GSEventRun()
#13 0x309021ee in UIApplicationMain()
#14 0x0000208a in main (argc=1, argv=0xbfffefbc) at /Users/johnbulcher/Documents/myApps/AnApp/main.m:14
Я до сих пор, чтобы иметь возможность дублировать backtrace1, хотя backtrace2 такой же последовательный, как и часовой. В этой катастрофе есть две странные вещи:
1) программное переключение между вкладками с использованием «tabBarController.selectedIndex» не приводит к сбою приложения - мне нужно вручную выбрать вкладки, чтобы свернуть приложение. 2) Я не вижу ни одного из моего кода, указанного в обратной линии, кроме основного. Строка коды в основном указан в трассировке является
int retVal = UIApplicationMain(argc, argv, nil, @"AnAppDelegate");
Где я должен начать смотреть, чтобы решить эту ошибку?
Думаю, я понял, что происходит не так. Я использую пользовательскую ячейку во всех трех вкладках, и я создаю ячейку с -autorelease. Однако в tab2 только что-то вроде: TitledCell * aCell = [[codeToInitCell] autorelease]; cell = aCell ;, тогда как в tab1 и tab3 я устанавливаю ячейку напрямую. Я предполагаю, что aCell был выпущен «в какой-то момент в будущем», но приложение затем попыталось освободить ячейку. Звучит ли это правильно? – JoBu1324
Да, это могло быть преступником. – fbrereto