EntityDescription的值ForUndefinedKey这个类不是密钥编码兼容的密钥“KEY”

问题描述:

我试图用以下代码将NSDictionary保存到核心数据。EntityDescription的值ForUndefinedKey这个类不是密钥编码兼容的密钥“KEY”

NSManagedObject *myObject = [NSEntityDescription 
           insertNewObjectForEntityForName:@"HomeDB" 
           inManagedObjectContext:context]; 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:dataDict forKey:@"pod_casts"]; 
[archiver finishEncoding]; 
[archiver release]; 
[myObject setValue:data forKey:@"podcasts"]; 
[data release]; 

[self saveChanges]; 

而且还试图从核心数据与下面的代码

NSEntityDescription *p = [NSEntityDescription entityForName:@"HomeDB" inManagedObjectContext:context]; 
NSData *data1 = [[NSMutableData alloc] initWithData:[p valueForKey:@"podcasts"]]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data1]; 
NSDictionary *dbData=[[unarchiver decodeObjectForKey:@"pod_casts"] retain]; 
[unarchiver finishDecoding]; 
[unarchiver release]; 
[data1 release]; 

检索的NSDictionary有什么不对呢?帮我。

我所创建的实体“HomeDB”有一个属性“播客”类型“二进制”提前

感谢

entityForName:...返回NSEntityDescription,你认为它会返回HomeDB您在第一个代码片段中创建的对象。

要检索的核心数据管理对象,你需要使用一个读取请求时,这样的事情:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"HomeDB"]; 
NSArray *results = [context executeFetchRequest:request error:nil]; 

结果数组将包含在你的环境中的所有HomeDB对象。

假设你只有一个,那么你最好把它弄出来是这样的:

NSManagedObject *homeDB = [results lastObject]; 
NSData *data = [homeDB valueForKey:@"podcasts"]; 

从这一点你可以用data对象作为你在你的第二个代码片段继续。

+0

我将数据保存为也编码的NSData。我需要这个NSData作为响应,然后我必须解码它。 此NSFetchRequest将返回结果作为NSArray。 你能帮我吗? –

+0

正如我在答案中所说的那样,数组将包含上下文中的所有HomeDB对象。我不知道你有多少,或者你想要哪一个。但是你可以用'[results lastObject]''来获得其中的一个。这会给你一个实际的'HomeDB'对象,然后你可以使用'valueForKey:@“播客获得数据”'' – jrturton