这是一个奇怪的问题。当我一直在处理我的应用程序时,时不时会出现这个问题,然后它总是神秘地消失了。今天它拒绝消失。
我的应用程序使用两个视图控制器来处理自动旋转。有时,Objective-C 找不到我的课程。例如 [OneViewController alloc] 会崩溃。我添加了一个函数来捕捉这种状态,即使我在运行我自己的一行代码之前调用它,事情仍然是坏的。我以此来证明无论是什么错误,都与我可能编写的任何错误代码无关。
任何人都知道为什么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