iPhone应用程序因NSUnknownKeyException setValue:forUndefinedKey而崩溃:

iPhone应用程序因NSUnknownKeyException setValue:forUndefinedKey而崩溃:,iphone,xib,key-value-coding,Iphone,Xib,Key Value Coding,我正在编写我的第一个iPhone应用程序,所以我还没有花时间去找出调试的方法。 基本上,我的应用程序会显示一个图像,当触摸时会播放一个简短的声音。 在XCode中编译和构建项目时,所有内容都会成功构建,但当应用程序在iPhone模拟器中运行时,它会崩溃 我得到以下错误: Application Specific Information: iPhone Simulator 1.0 (70), iPhone OS 2.0 (5A331) *** Terminating app due to unca

我正在编写我的第一个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.'
特定于应用程序的信息:
iPhone模拟器1.0(70)、iPhone操作系统2.0(5A331)
***由于未捕获异常“NSUnknownKeyException”而终止应用程序,
原因:'[setValue:forUndefinedKey:]:此类不是键值
符合密钥kramerImage的编码要求。”
kramerImage这是我用的背景图片

我不知道NSUnknownKeyException是什么意思,也不知道为什么该类不符合密钥的键值编码。

(这实际上不是特定于iPhone的,在普通的Cocoa中也会发生同样的事情)

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没有名为“PurpleMonKeyDishchiner”的属性(键)

代码中的某些内容试图为UIView上的键“kramerImage”设置一个值,该键(显然)不支持该键。如果您使用的是Interface Builder,它可能在nib中


找到正在使用“kramerImage”的位置,并尝试从那里跟踪它。

此外,重命名视图时,不要忘记删除文件所有者的引用。它还可能引发此错误。

下面是一个您将遇到此错误的地方,以及如何修复它。我是在加载一个只有自定义TableViewCell的nib时得到它的。我使用IB构建了一个只有文件所有者、第一响应者和TableViewCell的xib。TableViewCell只有4个UILabel,它们与一个名为rootCell的具有4个IBOutlet UILabel的类相匹配。我将TableViewCell的类更改为rootCell。它工作得很好,直到a做了一些更改,突然我得到了setValue:forUndefinedKey:当我刚从nib加载类后实例化它时:

    NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"rootCell-iPad" owner:self options:nil];

    cell = [nib objectAtIndex:0];
当nib尝试加载时,它在第一行失败。过了一会儿,我注意到它试图将IBOutlet标签与根控制器相匹配,而不是与rootCell类相匹配!那是我的小费。我犯的错误是无意中将文件的所有者更改为rootCell类。当我将它改回NSObject时,它在加载时没有尝试匹配委托(rootController)。因此,如果要执行上述操作,请将文件的所有者设置为NSObject,但要将UITableCell设置为所需的类。

您似乎正在这样做

@interface MyFirstIphoneAppViewController : UIViewController<> {
    UIImageView *InitialkramerImage;
}
@property(nonatomic,retain) IBOutlet UIImageView *InitialkramerImage;
@interface MyFirstIphoneAppViewController:UIViewController{
UIImageView*初始化kramerimage;
}
@属性(非原子,保留)IBUIImageView*InitialkramerImage;
然后,在合成该图像视图之后,当您在Interface Builder中打开“MyFirstIphoneAppViewController.xib”时,您将从工具(菜单)/库中获取一个图像视图,将该插座链接到“MyFirstIphoneAppViewController.xib”文件所有者的“InitialkramerImage”。然后你保存了这个项目。但在此之后,您可能会将出口变量“InitialkramerImage”的名称更改为“kramerImage”。那么,做了这个之后,

@interface MyFirstIphoneAppViewController : UIViewController<> {
    UIImageView *kramerImage;
}
@property(nonatomic,retain) IBOutlet UIImageView *kramerImage;
@interface MyFirstIphoneAppViewController:UIViewController{
UIImageView*kramerImage;
}
@属性(非原子,保留)IBUIImageView*kramerImage;
在运行项目时保存项目,在“MyFirstIphoneAppViewController.xib”中不存在“InitialkramerImage”的出口。因此,当您运行项目时,将不会有从Imageview引用到“kramerImage”和

“用于显示视图, UIViewController将尝试查找 “InitialkramerImage”的出口 不存在。”

因此,它将抛出“NSUnknownKeyException”

您可以通过以下方式检查丢失的插座: 打开nib(.xib)文件,然后单击鼠标右键 单击该文件的“文件所有者”


我今天也有同样的问题。我没有为导航控制器中的视图控制器指定正确的类。如果未能在Interface Builder中为视图指定正确的类,则经常会发生这种情况


您还将遇到无效的选择器问题。始终检查界面生成器类和连接

如果您在其他地方编写了此代码,并且有一个zip/压缩文件,请尝试再次解压缩它。这可能有用,我不知道为什么,但我觉得这是一个提取问题


或者您可以尝试将IBOutlet更改为kramerImage并在NIB中再次绑定。

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

这就是我解决问题的方法,在Interface builder中,右键单击视图控制器,缺少的插座或操作方法上应该有一个感叹号。查找并删除所有引用,然后解决它


发生这种情况是因为我删除了.m文件中的操作方法。

我收到了这个错误,这与interfacebuilder有关,但我不知道如何修复它。谢谢你-又浪费了3个小时终于修复了。:)在我将文件从一个项目复制到另一个项目的情况下,我遇到了这个问题。我的xib指的是错误的