カスタム オブジェクトの子配列を持つ、作成したカスタム オブジェクトに対して NSCoder メソッドの encodeWithCoder および initWithCoder を実装しようとしています。両方のカスタム オブジェクトは上記のメソッドを採用していますが、トップ レベル オブジェクトがデコードされた後は、配列の値は常に nil になります。
両方のオブジェクトは、以下のメソッドを実装します。ディクショナリと配列、またはフィールド名を取得してオブジェクトをディクショナリに変換するためのライブラリからの一般的なもの。配列で encodeObject が呼び出されていることを確認しましたが、現時点では配列は nil ではありません。デコードメソッドが反対側でnilを受け取っていることも同様に確認しました..
どこが間違っているのかわかりませんか?子配列オブジェクトがプロトコルを実装している限り、このようにしても問題ないと思いますか?
- (void)encodeWithCoder:(NSCoder *)aCoder{
NSDictionary* dictionary = [jrModelBinder unBind:self];
for(NSString* field in dictionary)
{
id val = [self valueForKey:field];
[aCoder encodeObject:val forKey:field];
}
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super init]){
NSArray* fields = [jrModelBinder propertyNames:self];
for(NSString* field in fields)
{
id val = [aDecoder decodeObjectForKey:field];
[self setValue:val forKey:field];
}
}
return self;
}