由于未捕获的异常'NSUnknownKeyException'而终止应用

时间:2011-11-22 19:43:55

标签: iphone xcode

我正在使用教程编写一个相当简单的应用程序。我今天将应用程序复制到了我的工作计算机它昨晚在我的笔记本电脑上完美运行,但今天我收到了这个错误。我尝试了几乎所有的代码,甚至删除了didFinishLaunchingWithOptions函数中的所有内容,但我仍然遇到了这个错误。我甚至没有在任何地方声明导航栏!我假设代码之外的某种项目或文件设置是问题吗?

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;
} 

我删除了项目中的所有其他文件但仍然出现此错误。

编辑2

现在看来,我只在工作机器上出现此错误。完全相同的文件在我家用笔记本电脑上运行完美。相同版本的XCode(4.2.1)

8 个答案:

答案 0 :(得分:34)

重置内容和设置无效。

这是我深夜2小时的浪费:

我已将界面构建器中的UIControl插座连接到xib所有者的IBOutlet。出于某种原因,IBOutlet已从所有者中删除,但对插座的引用仍悬挂在xib中。这总是会给我错误

"Terminating app due to uncaught exception 'NSUnknownKeyException'"

获得的经验教训:在实施中删除任何vars的出口时,请务必取消IB中相应的连接

更新:(2015年1月26日)

接口生成器或笔尖以这种方式运行的原因很明显,我今天意识到了原因。

如果您在TheBaseClass中有一个IBOutlet,并且您在TheSubClass的故事板中有一个笔尖或场景,则有两种方法(黑客)可供您连接此插座:

  1. 在Identity Inspector下,命名&#34;自定义类&#34;标识符到TheBaseClass,连接插座,然后在&#34;自定义类&#34;中设置类名。部分到TheSubclass

  2. 在TheSubclass代码中添加IBOutlet,将其连接到nib中的ui元素,在TheBaseClass中添加IBOutlet代码,在TheSubClass中删除该代码

  3. 当我遇到这个answer时,它就到位了,为什么Apple会让这个悬空参考问题保持不变。因为,这不是一个错误。这是一个功能。

答案 1 :(得分:15)

已修复 - 转到iOS模拟器&gt;重置内容和设置

答案 2 :(得分:9)

我遇到了这个问题,发现我设置了“主界面”,这引起了一个问题。

要更改此设置,请单击您的项目(在左侧文件浏览器中)。中心区域现在应显示项目设置的“摘要”。这与您更改iOS应用程序目标或支持的设备方向的区域相同。在“iPhone / iPod部署信息”部分下,清除“主界面”下拉列表,将其留空。这为我解决了这个问题。

祝你好运。

答案 3 :(得分:8)

问题出在您的nib文件中。从LetsEatAppDelegate到导航栏有一个旧的连接。

我不确定你的应用是如何设置的,你的一个nib文件中可能有一个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:

答案 4 :(得分:3)

哦,伙计。删除@properties和/或IBActions后我遇到了同样的问题,这让我发疯了!沃克斯特是对的钱。转到问题视图控制器,单击橙色球并取消选择您找到的任何悬空参考。您可能需要向下滚动才能找到它们。这解决了我的问题。太感谢了。

答案 5 :(得分:0)

清除“主界面”也为我解决了这个问题。清除“主界面”之后和构建之前,您可能需要执行“清理”。

答案 6 :(得分:0)

我也遇到了这个问题,

1.在AppDelegate方法

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

rootViewController是init通过这个方法initWithNibName .....但实际上nib文件不存在,所以抛出异常..

2.当viewController加载视图时,它崩溃

我想也许是因为我删除了xib文件,然后视图控制器仍然使用nib文件初始化..所以我添加 - (void)加载视图方法。现在好了..我:我重置了模拟器,但它不起作用。

希望得到这个帮助。

答案 7 :(得分:0)

我最近遇到了同样的问题。我所有的出口连接都很完美。我最终通过对项目进行了很好的清洁来实现这一目标。 感谢@Robert Wohnoutka和这篇文章:How to Delete Derived Data and Clean Project in Xcode 5 and Xcode 6?