2011-11-22 107 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:我重置模拟器,但它不起作用。

希望得到这个帮助。

相关问题