2011-11-22 158 views
19

我正在使用教程編寫一個相當簡單的應用程序。我今天將應用程序複製到我的工作電腦上。它昨天晚上在我的筆記本電腦上完美地工作,但今天我得到這個錯誤。我試着去掉幾乎所有的代碼,甚至刪除了didFinishLaunchingWithOptions函數中的所有內容,但仍然出現此錯誤。我甚至沒有在任何地方聲明navBar!我認爲在代碼之外有一些項目或文件設置是問題所在?由於未捕獲異常'NSUnknownKeyException'而終止應用程序

2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00fa45a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x010f8313 objc_exception_throw + 44 
    2 CoreFoundation      0x00fa44e1 -[NSException raise] + 17 
    3 Foundation       0x0079f677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x0002117a -[UIApplication _loadMainNibFile] + 172 
    10 UIKit        0x00021cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291 
    11 UIKit        0x0002c617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    12 UIKit        0x00024abf -[UIApplication sendEvent:] + 71 
    13 UIKit        0x00029f2e _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x011dd992 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00f85944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00ee5cf7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00ee2f83 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00ee2840 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00ee2761 CFRunLoopRunInMode + 97 
    20 UIKit        0x000217d2 -[UIApplication _run] + 623 
    21 UIKit        0x0002dc93 UIApplicationMain + 1160 
    22 LetsEat        0x00001c99 main + 121 
    23 LetsEat        0x00001c15 start + 53 
) 
terminate called throwing an exceptionCurrent language: auto; currently objective-c 
(gdb) 

編輯:這是我的delegate.m文件的頂部。正如你可以看到它是所有的樣板:

#import "LetsEatAppDelegate.h" 
//#import "ItemsViewController.h" 

@implementation LetsEatAppDelegate 

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

我刪除了項目中的所有其他文件,仍然得到這個錯誤。

EDIT 2

按照現在的情況,我只能得到我的工作機器上的這個錯誤。完全相同的文件在我的家用筆記本電腦上完美運行相同版本的XCode(4.2.1)

+0

顯示'LetsEat'的代碼。 – zaph

回答

15

固定 - 去iOS模擬器>重置內容和設置

8

該問題出現在您的nib文件中。有一個從LetsEatAppDelegate到navBar的舊連接。

我不知道你的應用程序是如何設置的,有可能是一個LetsEatAppDelegate對象在你的筆尖文件之一,或有可能是文件的所有者與類設置爲LetsEatAppDelegate

4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 


2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
+0

有趣的是,這基本上是一個全新的項目,基於窗口的應用程序。我絕對沒有創建過Navbar,而且我做了一次搜索,在我的項目的任何地方都找不到提及的導航欄。 – Jon

+1

嘗試在界面生成器中打開相關的xib,右鍵單擊文件所有者,然後檢查那裏的懸掛連接。這有時也發生在我身上...... – Warkst

+0

@Warkst感謝您澄清這一點。 @ Jon舊連接=懸掛連接 –

7

我有這個問題,並發現我已經設置了'主接口',這是造成一個問題。

要更改此設置,請單擊您的項目(在左側文件瀏覽器中)。現在中心區域應該顯示項目設置的「摘要」。這與您將更改iOS應用程序目標或受支持的設備方向的區域相同。在「iPhone/iPod部署信息」部分下,清除「主界面」下拉列表,將其留空。這解決了我的問題。

祝你好運。

+2

這幫助我在Ionic/Cordova應用上工作。清除主界面的值立即修復它。這個錯誤並不是對問題的描述。 – newz2000

+0

我也在使用離子過濾器,出於某種原因,我設置了主界面,經過幾小時的浪費時間後,發現這個謝謝@ newz2000 – marman

+0

對於我來說,Cordova/Ionic2應用程序也是如此。儘管如此,我自己設定了這個。 – Rocco

25

重置內容和設置不起作用。

這裏就是浪費我的深夜時間2個小時:

我曾在界面生成器在廈門國際銀行的所有者連接的UIControl出口到IBOutlet中。出於某種原因,IBOutlet被從所有者中刪除,但對該出口的引用仍然懸在xib中。這總是給我的錯誤

"Terminating app due to uncaught exception 'NSUnknownKeyException'" 

教訓:當執行刪除任何網點爲增值經銷商,一定要解開的IB相應的連接

更新:(2015年1月26日) 有一個體面的原因,爲什麼界面生成器或筆尖這樣的行爲,我明白了爲什麼,今天。

如果您在TheBaseClass有一個IBOutlet,和你在故事板的TheSubClass筆尖或場景,有兩種方法(黑客)可供您此插座連接:

  1. 下Identity Inspector,將The Custom Class標識符命名爲TheBaseClass,連接插座,然後將「Custom Class」部分中的Class名稱設置爲TheSubclass

  2. 將IBOutlet添加到您的TheSubclass代碼中,將它連接到ui元素在nib中,在TheBaseClass中添加IBOutlet代碼,刪除TheSubClass中的代碼

當我遇到這個answer它剛剛落實,至於爲什麼蘋果會讓這個懸而未決的參考問題保持原樣。因爲,它不是一個錯誤。它的一個特點。

+0

我學到的教訓是:不要使用IB。 –

+2

表示同意,IB當時並不成熟,現在也不是。但它肯定比2年前好上千萬倍。而XCode5 IB功能將使它更難以不使用IB,因爲它非常棒。已經從編程轉移到基於IB的開發,並仍然發誓:) –

+1

這是最好的答案。我爲此花了太多的神經細胞。謝啦!! –

0

清除「主界面」也解決了我的問題。在清除「主界面」之後和構建之前,您可能需要執行「清理」。

+0

但是爲什麼這會導致這個問題呢?這沒有任何意義。 – CommaToast

3

哦,夥計。刪除@properties和/或IBActions後,我遇到了同樣的問題,它讓我瘋狂! Warkst對這筆錢是正確的。轉到問題視圖控制器,點擊橙色球並取消選擇任何懸掛的引用。您可能需要向下滾動才能找到它們。這解決了我的問題。太感謝了。

0

我遇到這個問題太大,

1.In AppDelegate的方法

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

的RootViewController的是通過這個方法初始化initWithNibName .....但實際上筆尖文件是不存在的,所以異常拋出..

2.當負載的viewController鑑於它崩潰

我想也許是因爲我刪除廈門國際銀行文件,然後視圖控制器仍然init與nib文件..所以我添加 - (void)加載視圖方法。現在可以..ps:我重置模擬器,但它不起作用。

希望得到這個幫助。

相關問題