我有一個看起來像這樣的準系統形式兩個班的兩個數組對象圖的持久性:的XCode/iOS版:NSCoding - 與普通對象
@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只在GraphEdges.edges中添加對已經存在的GraphEdge實例的引用edges
。
我的問題是,解碼GraphNode和GraphEdges對象時,對象圖不能維持,因爲每個類創建自己存儲在edges
財產每一類原GraphEdge對象的版本。
我試圖對GraphNode中的整個NSMutableArray *邊做一個encodeConditionalObject,同時保持GraphEdges中的編碼無條件,但毫不奇怪,這只是無法對GraphNode.edges進行編碼,因爲條件放置在數組本身而不是它的對象上。
是否在兩種情況下遍歷數組的解決方案,並且對GraphNode的每個edges
成員執行條件編碼,但對GraphEdges中的每個成員edges
執行無條件編碼?
任何意見表示讚賞,非常感謝。
這與Xcode有什麼關係? – Caleb 2011-03-14 16:11:52