2011-03-28 110 views
20

,所以我有这个这个类不是键值编码兼容的关键给定名称

- (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笔尖的初始化中做一些事情,但我不知道如何解决这个问题。

+0

它的工作,直到我开始连接第二类IBOutlets。 – flaviusilaghi 2011-03-28 11:12:10

回答

84

这通常意味着某事正试图访问@property“givenName”。

如果你正在做与IB的东西,通常的原因是您:

  • 删除从类, 该财产,但没有删除在IB 的进行连接尚未
  • OR:你有一个文件的所有者 对象设置为错误的类(检查 的属性 - 不同取决于你正在使用的xcode的版本 - 找到类名称 其设置为您可能复制/粘贴一个NIB文件,并didn在NIB中不会改变这个字段),并且你已经连接了一个 出口该类,但你的 实际文件的所有者是什么 不同
+1

我有一个不同的问题,给出了错误,你明确的一般准则帮助我找到解决方案。一个剩下的连接被弄脏了。 – 2012-10-17 20:56:40

+16

苹果真的应该考虑改进他们的错误信息。 – devios1 2013-04-09 21:47:53

+0

谢谢你节省了我的时间:D – 2013-12-26 19:10:06

4

时存在IBOutlet S IN的NIB文件和.h文件之间的不匹配,通常会出现此问题。

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

+0

我在IB没有任何断开的连接。 – flaviusilaghi 2011-03-28 11:24:15

+0

我设法使它工作。我只是在主类中声明了IBOutlets,并将FileOwner设置为同一个类。谢谢您的帮助。 – flaviusilaghi 2011-03-28 11:30:38

3

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

因此我删除了由Xcode 4创建的DerivedData文件夹内的文件夹。然后它就起作用了!

1

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

为了解决这个问题,对于每一个ViewController为您删除.xib,文件中添加以下代码:

-(NSString*) nibName 
{ 
    return nil; 
} 
1

如果你有不同的storybord文件,如果您有与流出出口创造出口引用您的头文件然后你只需通过右键单击文件所有者来删除连接。

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

请仔细阅读以获取清晰的解释。这个类不是密钥编码密钥

相关问题