iPhone应用程序因NSUnknownKeyException setValue:forUndefinedKey而崩溃:
我正在编写我的第一个iPhone应用程序,所以我还没有花时间去找出调试的方法。 基本上,我的应用程序会显示一个图像,当触摸时会播放一个简短的声音。 在XCode中编译和构建项目时,所有内容都会成功构建,但当应用程序在iPhone模拟器中运行时,它会崩溃 我得到以下错误: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
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指的是错误的