私は奇妙なバグがあります。どのようにトラッキングするのか分かりません。私はSimmulator 3.0でアプリを実行しています。 tabBarcontrollerには3つのタブがあり、それらをtab1、tab2、およびtab3と呼ぶことにしましょう。 3つのタブはすべてカスタマイズされたグループ化されたテーブルのサブクラスです。 tab1とtab3の間を無期限に前後にクリックすると、問題はありません。ただし、tab1またはtab3からtab2までをちょうど5回クリックすると、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
backtrace2は時計の仕事と同じですが、backtrace1と同じです。
1) "tabBarController.selectedIndex"を使用してプログラム間でタブを切り替えると はアプリケーションをクラッシュさせません - アプリケーションをクラッシュさせるためにタブを手動で選択する必要があります。 2)メインとは別に、バックトレースに表示されているコードは表示されません。バックトレースに示されているメインのコードの行は、私がこのバグを解決するために見て開始する必要があります
int retVal = UIApplicationMain(argc, argv, nil, @"AnAppDelegate");
のですか?
私は何がうまくいかないのか分かったと思います。私は3つのタブすべてでカスタムセルを使用し、セルを-autoreleaseで作成します。しかし、tab2では次のようなことしかしませんでした:TitledCell * aCell = [[codeToInitCell] autorelease]; cell = aCell;一方、tab1とtab3ではセルを直接設定します。私はaCellが「将来のある時点で」リリースされたと推測していますが、その後アプリはセルをリリースしようとしました。それは正しいと思いますか? – JoBu1324
それは犯人かもしれなかった。 – fbrereto