EntityDescription值ForUndefinedKey此类不是键值“KEY”的键值编码兼容

时间:2013-09-24 14:14:52

标签: ios objective-c core-data

我正在尝试使用以下代码将NSDictionary保存到核心数据。

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];

还尝试使用以下代码从核心数据中检索NSDictionary

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];

这有什么问题?帮我。

我创建了实体" HomeDB"有一个属性"播客"类型" Binary"

提前致谢

1 个答案:

答案 0 :(得分:2)

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

要从核心数据中检索托管对象,您需要使用获取请求,如下所示:

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

results数组将包含上下文中的所有HomeDB个对象。

假设你只有一个,那么你就这样得到它:

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

从这一点开始,您可以像在第二个代码段中一样继续使用data对象。