此类不是键值givenName的键值编码兼容

时间:2011-03-28 11:10:23

标签: iphone

我有这个

- (void)loadView {
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* databasePath = [documentsPath stringByAppendingPathComponent:@"ProxDeals.db"];
NSError *error;

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:databasePath];
if (fileExists==TRUE) {
    [[NSBundle mainBundle] loadNibNamed:@"ProxDealsViewController" owner:self options:nil];
}
else {
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ProxDeals.db"];
    NSLog(@"%@",defaultDBPath);
    success = [fileManager copyItemAtPath:defaultDBPath toPath:databasePath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@/.", [error localizedDescription]);
    }
    [[NSBundle mainBundle] loadNibNamed:@"UserRegistration" owner:self options:nil];
}

}

并出现此错误:

 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<ProxDealsViewController 0x5f22160> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key givenName.'

我知道我在UserRegistration nib的初始化中没有做些什么,但我不知道如何解决这个问题。

5 个答案:

答案 0 :(得分:85)

这通常意味着某些东西试图访问@property“givenName”。

如果您正在与IB做某事,通常的原因是您要么:

  • 从班级中删除了该属性, 但是没有删除IB中的连接 但
  • 或者:你有一个文件所有者 对象设置为错误的类(检查 属性 - 根据您使用的xcode版本而不同 - 查找类名 它的设定为。您可能复制/粘贴了一个NIB文件,并且没有在NIB中更改此字段),并且您已经连接了 那个班的出路,但你的 实际文件的所有者是一个东西 不同

答案 1 :(得分:4)

当NIB文件中的IBOutlet与.h文件不匹配时,通常会出现此问题。

确保您在IB中没有任何断开的连接(它们通常显示为黄色并且旁边有警告标志)。此外,在构建之前清理项目(产品&gt;在XCode 4中清理),您可能有一个陈旧的编译文件。

答案 2 :(得分:3)

我从nib文件中删除了一个UI元素,并从视图控制器中删除了相应的IBOutlet,这也发生在我身上。清理项目也没有解决它。

因此,我删除了由Xcode 4创建的DerivedData文件夹中的文件夹。然后它工作了!

答案 3 :(得分:2)

如果您有不同的storybord文件,并且如果您的头文件中有出口创建的出口参考,那么您只需右键单击文件所有者即可删除连接。

文件所有者 - &gt;右键单击 - &gt;删除那里不需要的插座连接。 清理并运行您的项目

仔细阅读此内容。此类不是密钥值编码兼容的密钥

答案 4 :(得分:1)

有时,从设备/模拟器中删除应用程序非常烦人,尤其是在保存数据和配置时。

要解决此问题,对于您删除了ViewController的每个.xib,文件都会添加以下代码:

-(NSString*) nibName
{
    return nil;
}