ベアボーン形式で次のような 2 つのクラスがあります。
@interface GraphNode {
NSMutableArray *edges;
}
@implementation GraphNode
-(id)initWithCoder:(NSCoder *)coder {
if (self = [super init]) {
edges = [coder decodeObjectForKey:@"edges"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder*)coder {
[coder encodeObject:edges forKey:@"edges"];
}
@end
@interface GraphEdges {
NSMutableArray *edges;
}
@implementation GraphEdges
-(id)initWithCoder:(NSCoder *)coder {
if (self = [super init]) {
edges = [coder decodeObjectForKey:@"edges"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder*)coder {
[coder encodeObject:edges forKey:@"edges"];
}
@end
NSCoding を実装するタイプ GraphEdge のオブジェクトである NSMutableArray をエンコード/デコードするという同じ動作を表現しているように見えることに気付くでしょう。実際のクラスの違いは、GraphEdges がそのプロパティでエッジを作成するのに対し、GraphNode はGraphEdges.edges の既存の GraphEdge インスタンスへの参照のみをedges
独自に追加することです。edges
edges
私の問題は、各クラスが各クラスのプロパティに格納されている元の GraphEdge オブジェクトの独自のバージョンを作成するため、GraphNode および GraphEdges オブジェクトをデコードするときにオブジェクト グラフが維持されないことです。
GraphEdgesのエンコードを無条件に保ちながら、GraphNodeのNSMutableArray *edges全体でencodeConditionalObjectを実行しようとしましたが、当然のことながら、条件はオブジェクトではなく配列自体に配置されるため、これは単にGraphNode.edgesのエンコードに失敗します。
どちらの場合も配列を反復処理し、GraphNode の各メンバーに対して条件付きエンコーディングを実行しますedges
が、GraphEdges の各メンバーに対して無条件エンコーディングを実行するソリューションはedges
ありますか?
アドバイスをいただければ幸いです。