2011-03-14 79 views
0

我有一個看起來像這樣的準系統形式兩個班的兩個數組對象圖的持久性:的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執行無條件編碼?

任何意見表示讚賞,非常感謝。

+0

這與Xcode有什麼關係? – Caleb 2011-03-14 16:11:52

回答

1

我認爲這裏的問題是你要分別存檔GraphNode和GraphEdges對象。在某種容器中組合所有相關的GraphNode和GraphEdges對象,可能是'Graph',以便它們全部成爲同一對象圖的一部分。我相信NSKeyedArchiver只會將每個對象存檔一次。

+0

你說得對,我給了他們一個實施NSCoding的共同祖先,問題解決了。非常感謝,迦勒。 – KomodoDave 2011-03-20 12:27:00