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

btw*_*btw 18 iphone key-value-coding xib

我正在编写我的第一个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.'
Run Code Online (Sandbox Code Playgroud)

kramerImage这里是我用于背景的图像.

我不确定NSUnknownKeyException是什么意思,或者为什么该类不是密钥值编码兼容的密钥.

amr*_*rox 22

(这不是特定于iPhone的 - 在常规Cocoa中也会发生同样的事情).

使用键值编码访问对象没有的键时,NSUnknownKeyException是一个常见错误.

大多数Cocoa对象的属性可以直接访问:

[@"hello world" length]    // Objective-C 1.0
@"hello world".length      // Objective-C 2.0
Run Code Online (Sandbox Code Playgroud)

或通过键值编码:

[@"hello world" valueForKey:@"length"]
Run Code Online (Sandbox Code Playgroud)

如果我使用以下行,我会得到一个NSUnknownKeyException:

[@"hello world" valueForKey:@"purpleMonkeyDishwasher"]
Run Code Online (Sandbox Code Playgroud)

因为NSString没有名为'purpleMonkeyDishwasher'的属性(key).

代码中的某些东西试图在UIView上为键'kramerImage'设置一个值,显然它不支持该键.如果您正在使用Interface Builder,它可能是您的笔尖中的内容.

找到'kramerImage'的使用位置,并尝试从那里追踪它.

  • 我收到这个错误,这与interfacebuilder有关,但我无法弄清楚如何修复它. (2认同)

Ozk*_*ner 10

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


Owe*_*ett 8

在这里你会得到这个错误 - 以及如何解决它.我在加载一个只有自定义TableViewCell的笔尖时得到它.我使用IB来构建一个只拥有File的Owner,First Responder和TableViewCell的xib.TableViewCell只有4个UILabel,它与一个名为rootCell的4个IBOutlet UILabel相匹配.我将TableViewCell的类更改为rootCell.它工作得很好,直到做了一些改动,突然我得到了setValue方法:forUndefinedKey:当我从笔尖加载它后,只是实例化类:

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

    cell = [nib objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

当笔尖试图加载时,它在第一行失败了.过了一会儿,我注意到它试图将IBOutlet标签与根控制器匹配,而不是rootCell类!那是我的小费.我做错了是无意中将文件所有者更改为rootCell类.当我将其更改回NSObject时,它在加载时没有尝试匹配委托(rootController).因此,如果您正在执行上述操作,请将File的所有者设为NSObject,但将UITableCell设为您想要的类.