我正在编写我的第一个iPhone应用程序,所以我还没有找到很多调试方法.基本上我的应用程序显示图像,触摸时播放短暂的声音.在XCode中编译和构建项目时,一切都成功构建,但是当应用程序在iPhone模拟器中运行时,它会崩溃.
我收到以下错误:
Application Specific Information: iPhone Simulator 1.0 (70), iPhone OS 2.0 (5A331) *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 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没有名为'purpleMonkeyDishwasher'的属性(key).
代码中的某些东西试图在UIView上为键'kramerImage'设置一个值,显然它不支持该键.如果您正在使用Interface Builder,它可能是您的笔尖中的内容.
找到'kramerImage'的使用位置,并尝试从那里追踪它.
此外,当您重命名视图时,不要忘记删除文件所有者上的引用.它也可能引发此错误.
在这里你会得到这个错误 - 以及如何解决它.我在加载一个只有自定义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];
当笔尖试图加载时,它在第一行失败了.过了一会儿,我注意到它试图将IBOutlet标签与根控制器匹配,而不是rootCell类!那是我的小费.我做错了是无意中将文件所有者更改为rootCell类.当我将其更改回NSObject时,它在加载时没有尝试匹配委托(rootController).因此,如果您正在执行上述操作,请将File的所有者设为NSObject,但将UITableCell设为您想要的类.