我有这个
- (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的初始化中没有做些什么,但我不知道如何解决这个问题。
答案 0 :(得分:85)
这通常意味着某些东西试图访问@property“givenName”。
如果您正在与IB做某事,通常的原因是您要么:
答案 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;
}