1

我正在尝试使用以下代码将 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”,其中一个属性“podcasts”类型为“Binary”

提前致谢

4

1 回答 1

2

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

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

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

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

假设你只有一个,那么你会像这样把它拿出来:

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

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

于 2013-09-25T06:01:34.740 回答