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

これの何が問題なのですか?助けて。

タイプ「バイナリ」の 1 つの属性「ポッドキャスト」を持つエンティティ「HomeDB」を作成しました

前もって感謝します

4

1 に答える 1

2

entityForName:...を返す場合、最初のコード スニペットで作成しNSEntityDescriptionたオブジェクトが返されると考えているようです。HomeDB

コア データから管理対象オブジェクトを取得するには、次のようなフェッチ リクエストを使用する必要があります。

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

結果配列にはHomeDB、コンテキスト内のすべてのオブジェクトが含まれます。

1つしかないと仮定すると、次のように取得できます。

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

この時点からdata、2 番目のコード スニペットと同じようにオブジェクトを使用できます。

于 2013-09-25T06:01:34.740 に答える