【发布时间】:2011-03-14 16:04:29
【问题描述】:
我有两个类似这样的准系统类:
@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,其内容是实现 NSCoding 的 GraphEdge 类型的对象。实践中类之间的区别在于 GraphEdges 在其 edges 属性中创建边,而 GraphNode 在其自己的 edges 中添加仅对 GraphEdges.edges 中已经存在的 GraphEdge 实例的引用。
我的问题是,在解码 GraphNode 和 GraphEdges 对象时,不会维护对象图,因为每个类都会为每个类创建存储在 edges 属性中的原始 GraphEdge 对象的自己的版本。
我尝试对 GraphNode 中的整个 NSMutableArray *edges 执行 encodeConditionalObject,同时保持 GraphEdges 中的编码无条件,但不出所料,这根本无法对 GraphNode.edges 进行编码,因为条件放置在数组本身上,而不是它的对象上。
解决方案是否在这两种情况下都遍历数组,并对 GraphNode 中的每个 edges 成员执行条件编码,但对 GraphEdges 中 edges 的每个成员执行无条件编码?
感谢任何建议,非常感谢。
【问题讨论】:
-
这和 Xcode 有什么关系?