iPhone应用程序崩溃与NSUnknownKeyException setValue:forUndefinedKey:

caut 发布于 2018-04-26 iphone 最后更新 2018-04-26 20:28 712 浏览

我正在编写我的第一个iPhone应用程序,所以我没有得到解决调试的方式。 本质上,我的应用程序显示图像,触摸时会播放短暂的声音。 在XCode中编译和构建项目时,一切都会成功完成,但是当应用程序在iPhone模拟器中运行时,它会崩溃。 我收到以下错误:

Application Specific Information:
iPhone Simulator 1.0 (70), iPhone OS 2.0 (5A331)
*** Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<UIView 0x34efd0> setValue:forUndefinedKey:]: this class is not key value 
coding-compliant for the key kramerImage.'
这里的kramerImage是我用于背景的图像。 我不确定NSUnknownKeyException意味着什么,或者为什么该类不是密钥的关键值编码。
已邀请:

rqui

赞同来自:

(这不是真正的iPhone - 同样的事情会发生在普通的可可)。 当使用Key-Value Coding来访问对象不具有的键时,NSUnknownKeyException是一个常见错误。 大多数Cocoa对象的属性可以直接访问:

[@"hello world" length]    // Objective-C 1.0
@"hello world".length      // Objective-C 2.0
或通过键值编码:
[@"hello world" valueForKey:@"length"]
如果我使用以下行,我会得到一个NSUnknownKeyException:
[@"hello world" valueForKey:@"purpleMonkeyDishwasher"]
因为NSString没有一个名为'purpleMonkeyDishwasher'的属性(键)。 你的代码中的某些东西试图为UIView上的键“kramerImage”设置一个值,该键显然不支持该键。如果你使用的是界面生成器,它可能是你的笔尖的东西。 找到'kramerImage'正在被使用的地方,并尝试从那里追踪它。

phic

赞同来自:

另外,当您重命名视图时,不要忘记删除文件所有者的引用。它也可能引发这个错误。

cnon

赞同来自:

这里有一个你会得到这个错误的地方 - 以及如何解决它。加载一个只有自定义TableViewCell的笔尖时,我得到它。我使用IB来构建一个只有文件所有者,第一响应者和TableViewCell的xib。 TableViewCell只有4个UILabel,它们与4个名为rootCell的IBOutlet UILabel相匹配。我将TableViewCell的类更改为rootCell。它工作得很好,直到做了一些改变,突然间我得到了setValue:forUndefinedKey:当我从nib加载它后实例化类时:

    NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"rootCell-iPad" owner:self options:nil];
cell = [nib objectAtIndex:0];
它在第一行失败,当笔尖试图加载时。过了一会儿,我发现它试图将IBOutlet标签与根控制器相匹配,而不是rootCell类!这是我的回应。我做错了什么是无意中将文件所有者更改为rootCell类。当我将其更改回NSObject时,它在加载时没有尝试匹配委托(rootController)。所以,如果你正在做上面的事情,把File的Owner作为一个NSObject,但是让UITableCell成为你想要的类。

rtotam

赞同来自:

看来你在做

@interface MyFirstIphoneAppViewController : UIViewController<> {
    UIImageView *InitialkramerImage;
}
@property(nonatomic,retain) IBOutlet UIImageView *InitialkramerImage;
然后,在合成该imageview后,当您在Interface Builder中打开“MyFirstIphoneAppViewController.xib”时,您将从工具(菜单)/ Library den中将图像视图链接到来自“MyFirstIphoneAppViewController.xib”的文件所有者的“InitialkramerImage” 。然后你保存了这个项目。但在此之后,您可能会将插座变量“InitialkramerImage”的名称更改为“kramerImage”。所以,这样做之后
@interface MyFirstIphoneAppViewController : UIViewController<> {
    UIImageView *kramerImage;
}
@property(nonatomic,retain) IBOutlet UIImageView *kramerImage;
并在运行时保存项目。“MyFirstIphoneAppViewController.xib”中不存在“InitialkramerImage”的出口。所以,当你运行这个项目时,Imageview将不会有引用到'kramerImage'和
"For displaying the view, UIViewController will try to find the outlet to "InitialkramerImage" which is not existing."
所以,它会抛出“NSUnknownKeyException”。
You can check the missing outlet by opening the nib(.xib) file then right clicking on the 'Files Owner' of that.

snihil

赞同来自:

今天我也遇到了同样的问题。我的导航控制器中没有为View Controller指定的类。如果您无法在Interface Builder中为您的视图指定正确的类,则会经常发生这种情况。 您也会遇到无效的选择器问题。总是检查你的Interface Builder类和连接!

aeius

赞同来自:

如果你在其他地方完成了这个代码并且有一个zip /压缩文件,请尝试再次提取它。它可能工作我不知道为什么,但我觉得这是一个提取问题。 或者您可以尝试将IBOutlet更改为kramerImage并在NIB中重新绑定它。

et_qui

赞同来自:

我遇到了这种情况,甚至在找到变量的所有实例并删除它们后,我的应用程序仍然崩溃。继承人发生了什么......我从XIB的textfield中创建了另一个变量实例到我的viewController.h中,但是我意识到我不再需要它并将其删除。事实证明,我的程序看到了它,并一直试图在程序中使用它,如果这发生在其他任何地方,只要进入你的XIB,右键单击按钮或文本字段等,并删除任何额外的未使用的变量。

xillum

赞同来自:

这是我如何解决我的,在界面生成器中右键单击视图控制器,应该有缺少的插座或操作方法上的感叹号。找到并删除所有的参考,并解决它。 发生这种情况是因为我删除了.m文件中的操作方法。