Это странно. Время от времени, когда я работал над своим приложением, эта проблема всплывала, а затем всегда таинственно исчезала. Сегодня он отказывается исчезнуть.
Мое приложение использует два контроллера вида для обработки автоматического поворота. Иногда 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