これは奇妙なものです。私が自分のアプリケーションに取り組んでいるとき、この問題が発生したり、消えたりしました。今日、それは消えることを拒否しています。
私のアプリは、2 つのビュー コントローラーを使用して自動回転を処理します。Objective-C がクラスを見つけられないことがあります。たとえば、[OneViewController alloc] はクラッシュします。この状態をキャッチする関数を追加しましたが、自分のコードを 1 行実行する前に関数を呼び出しても、問題は解決しません。私はこれを、私が書いた悪いコードではないことを証明するために取っています。
universalGoodness が定数にならない理由を知っている人はいますか?
void verifyUniversalGoodness()
{
id portrait_class, landscape_class;
portrait_class = NSClassFromString(@"OneViewController");
landscape_class = NSClassFromString(@"OtherViewController");
NSLog(@"CHECKING GOODNESS: portrait %@, landscape %@", portrait_class, landscape_class);
if (portrait_class == nil || landscape_class == nil)
exit(0);
}
int main( int argc, char *argv[] )
{
verifyUniversalGoodness();
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
alloc の呼び出しを実行すると、スタック トレースは次のようになります。
#1 0x3356296c in _class_initialize ()
#2 0x33567dfe in prepareForMethodLookup ()
#3 0x33565168 in lookUpMethod ()
#4 0x33562914 in _class_lookupMethodAndLoadCache ()
#5 0x3356264a in objc_msgSend_uncached ()
#6 0x000de704 in -[MyAppDelegate finishStartup] (self=0x61c9a0, _cmd=0x303117) at /Users/michael.toy/PROJECT/MyAppDelegate.mm:180
#7 0x32b77904 in __NSFireDelayedPerform ()
#8 0x32c23d22 in CFRunLoopRunSpecific ()
#9 0x32c234e0 in CFRunLoopRunInMode ()
#10 0x30d620da in GSEventRunModal ()
#11 0x30d62186 in GSEventRun ()
#12 0x314d54c8 in -[UIApplication _run] ()
#13 0x314d39f2 in UIApplicationMain ()
#14 0x000e13a8 in main (argc=1, argv=0x2ffff5a8) at /Users/michael.toy/PROJECT/main.mm:38