У меня есть два класса, которые выглядят следующим образом в виде barebones:
@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
Вы заметите, что они, кажется, выражают одинаковое поведение - кодирование / декодирование NSMutableArray, содержимое которого является объектами типа GraphEdge, которыереализует NSCoding.Различие между классами на практике заключается в том, что GraphEdges создает ребра в своем свойстве edges
, тогда как GraphNode добавляет к своим собственным edges
только ссылки на уже существующие экземпляры GraphEdge в GraphEdges.edges.
Моя проблемачто при декодировании объектов GraphNode и GraphEdges граф объекта не поддерживается, поскольку каждый класс создает свои собственные версии исходных объектов GraphEdge, хранящихся в свойстве edges
для каждого класса.
Я попытался выполнить encodeConditionalObject дляцелые ребра NSMutableArray * в GraphNode при сохранении безусловного кодирования в GraphEdges, но неудивительно, что это просто не в состоянии кодировать GraphNode.edges, поскольку условие помещается в сам массив, а не в его объекты.массивы в обоих случаях, и выполняют условное кодирование для каждого edges
члена для GraphNode, но безусловное кодирование для каждого члена edges
в GraphEdges?
Любой совет приветствуется, большое спасибо.