這是一個奇怪的。當我一直在處理我的應用程序時,這個問題已經出現,並且一直神祕地消失。今天它拒絕消失。iOS應用程序,類忽然消失,在分配崩潰
我的應用程序使用兩個視圖控制器來處理自動旋轉。有時,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;
}
下面是一個堆棧跟蹤看起來像如果我讓它運行調用頁頭的......
#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
你確定崩潰在'+ [OneViewController alloc]'?你是否重寫'alloc'或'allocWithZone:'? – dreamlax 2010-08-05 02:35:56
問題是從未調用[OneViewController alloc],因爲目標c運行時無法找到名爲「OneViewCon troller」的類,當它查找該方法名稱時,它會變爲null,然後在嘗試調用時崩潰方法。當這個問題出現時,就像今天一樣,我甚至沒有編輯該類的代碼。鏈接時或運行時有問題。 – mtoy 2010-08-05 02:40:04
對不起,不,我沒有實現alloc或allocwithZone – mtoy 2010-08-05 02:47:44