2012-03-22 92 views
0

假設我定義了一個實現NSCoding協議的ClassA(該類包含多個變量,如NSString,NSArray等)。 我也創建了一個ClassB,它有一個ClassA類型的變量。 事情是這樣的:遞歸歸檔目標C中的類

@interface ClassB: NSObject <NSCoding> 
{ 
    NSString *str; 
    NSDate *date; 
    int x; 
    ClassA *sc; 
} 

在我的計劃,我想存檔類型ClassB的變量。 是否有可能遞歸存檔自定義對象?如果是這樣,怎麼樣?

謝謝!

回答

1

您需要實現NSCoding接口,爲您的ClassB的:

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super initWithCoder:decoder]; 
    if (self) 
    { 
     str = [[decoder decodeObjectForKey:@"MyStr"] retain]; 
     date = [[decoder decodeObjectForKey:@"MyDate"] retain]; 
     x = [decoder decodeIntegerForKey:@"MyX"]; 
     sc = [decoder decodeObjectForKey:@"MyClassA"]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [super encodeWithCoder:encoder]; 
    [encoder encodeObject:str forKey:@"MyStr"]; 
    [encoder encodeObject:date forKey:@"MyDate"]; 
    [encoder encodeInteger:x forKey:@"MyX"]; 
    [encoder encodeObject:sc forKey:@"MyClassA"]; 
} 

ClassA的必須實現NSCoding協議爲好。

1

與序列化在Java中的工作方式類似,通過NSCoder進行存檔的方式與ObjC中的方式相同。基本上,每個對象都用'id'編碼,每個對象都是另一個對象的成員,而不是作爲單獨的對象編碼。這樣,您可以安全地擁有遞歸對象。