2011-04-26 55 views
0

我的代碼編譯但我在嘗試啓動時遇到運行時錯誤。嘗試構建基於iOS應用程序的簡單UITabBarController時出現運行時錯誤

下面是運行時錯誤:

2011-04-25 23:56:40.689 Noun[39033:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NounAppDelegate 0x4e1c400> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key viewController.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00dc75a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f1b313 objc_exception_throw + 44 
    2 CoreFoundation      0x00dc74e1 -[NSException raise] + 17 
    3 Foundation       0x0002f677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x0002f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x004b330c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00d3d8cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x004b1d23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x004b3ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x002b917a -[UIApplication _loadMainNibFile] + 172 
    10 UIKit        0x002b9cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291 
    11 UIKit        0x002c4617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    12 UIKit        0x002bcabf -[UIApplication sendEvent:] + 71 
    13 UIKit        0x002c1f2e _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x0171f992 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00da8944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00d08cf7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00d05f83 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00d05840 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00d05761 CFRunLoopRunInMode + 97 
    20 UIKit        0x002b97d2 -[UIApplication _run] + 623 
    21 UIKit        0x002c5c93 UIApplicationMain + 1160 
    22 Noun        0x00001e68 main + 102 
    23 Noun        0x00001df9 start + 53 
) 
terminate called after throwing an instance of 'NSException' 

這裏是我的代碼(相關方法)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    //Initiate TabBarController 
    self.tabBarController = [[UITabBarController alloc] init]; 

    NSMutableArray *viewControllersForTabController = [[NSMutableArray alloc] initWithCapacity:2]; 

    NounViewController *firstViewController = [[NounViewController alloc] initWithNibName:@"NounViewController" bundle:[NSBundle mainBundle]]; 
    [viewControllersForTabController addObject:firstViewController]; 
    [firstViewController release]; 

    PostLoginViewController *secondViewController = [[PostLoginViewController alloc] initWithNibName:@"PostLoginViewController" bundle:[NSBundle mainBundle]]; 
    [viewControllersForTabController addObject:secondViewController]; 
    [secondViewController release]; 

    [tabBarController setViewControllers:viewControllersForTabController]; 
    [viewControllersForTabController release]; 

    [window addSubview:tabBarController.view]; 

    return YES; 
} 

我敢肯定,這可能是一些小事,我已經忘了做,我在iOS開發中慢慢加快速度

回答

1

「NSUnknownKeyException」當你訪問一個不存在的密鑰時,這個異常來了,這並不總是因爲代碼,所以可能會有這樣的情況我在Interface Builder中連接錯誤。上面的代碼沒有問題,我嘗試了我的結局,它的運行成功。嘗試檢查您的界面生成器連接可能是你錯過了一些東西。大多數情況下,您可能首先嚐試通過IB添加tabBarController,然後通過代碼執行此操作。

+0

謝謝saadnib,我在我的plist文件和筆尖上打字。這不是很明顯。 – 2011-04-26 04:45:34

0

我以前有過同樣的問題。問題是在xib文件中有一個接口生成器連接,因此應用程序委託中沒有相應的IBOutlet條目。 這是我能夠修復它的方式: 在MainWindow.xib文件中查找XML標籤「IBObjectContainer」。您很可能會找到這樣的條目:

<object class="IBConnectionRecord"> 
    <object class="IBCocoaTouchOutletConnection" key="connection"> 
     <string key="label">viewController</string> 
     <reference key="source" ref="664661524"/> 
     <reference key="destination" ref="943309135"/> 
    </object> 
    <int key="connectionID">11</int> 
</object> 

您可以安全地移除此條目,因爲它似乎已經誤導入xib文件。然後應用程序委託停止期待IBOutlet條目。 或者,您可以通過名稱「viewController」在應用程序委託中添加IBOutlet條目。

確保在進行任何更改之前備份xib文件。

從IB可能有一個更簡單的方法擺脫這種情況,但我通常不會用到IB,這是對我有用的。

相關問題