NSKeyedArchiver に問題があります。辞書をアーカイブしようとしています。辞書には、カスタム オブジェクトの配列、Album および Song が含まれています。
Album と Song はどちらも NSObject に固有であり、NSCoding プロトコルに準拠しています。プロトコルの実装方法は次のとおりです。
アルバム実装ファイル:
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
self.title = [aDecoder decodeObjectForKey:@"title"];
self.artistName = [aDecoder decodeObjectForKey:@"artistName"];
self.songs = [aDecoder decodeObjectForKey:@"songs"];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.title forKey:@"title"];
[aCoder encodeObject:self.artistName forKey:@"artistName"];
[aCoder encodeObject:self.songs forKey:@"songs"];
}
ソング実装ファイル:
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
self.title = [aDecoder decodeObjectForKey:@"title"];
self.artistName = [aDecoder decodeObjectForKey:@"artistName"];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.title forKey:@"title"];
[aCoder encodeObject:self.artistName forKey:@"artistName"];
}
title プロパティと artistName プロパティはどちらも NSStrings であり、白の song プロパティは Song オブジェクトの配列です。
これらのオブジェクトの配列を ipodDictForArchiving という辞書に配置し、次のように辞書をアーカイブします。
-(NSData *)dataForClient {
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:[self ipodDictForArchiving] forKey:kDataArchive];
[archiver finishEncoding];
NSLog(@"encoded dictionary");
return data;
}
次に、次のように辞書を解凍します。
-(NSDictionary *)unarchiveData:(NSData *)data {
NSData *clientData = data;
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:clientData];
NSDictionary *myDictionary = [unarchiver decodeObjectForKey:kDataArchive];
[unarchiver finishDecoding];
return myDictionary;
}
何らかの理由で、ディクショナリには Song オブジェクトと Album オブジェクトが含まれていますが、これらのオブジェクトはプロパティに対して null を返します。私はこれを理解することができません。
ありがとう