2012-03-22 4 views
0

NSCoding 프로토콜을 구현하는 ClassA를 정의한다고 가정 해 보겠습니다.이 클래스에는 NSString, NSArray 등과 같은 여러 변수가 들어 있습니다. 또한 ClassA 유형의 변수가있는 ClassB를 만듭니다. 이 같은 뭔가 :Objective C에서 클래스를 재귀 적으로 보관

내 프로그램에서
@interface ClassB: NSObject <NSCoding> 
{ 
    NSString *str; 
    NSDate *date; 
    int x; 
    ClassA *sc; 
} 

, I 형 ClassB가의 변수를 보관하고 싶습니다. 사용자 지정 개체를 반복적으로 보관할 수 있습니까? 그렇다면 어떻게?

감사합니다.

답변

1

당신은 당신의 ClassB가의 NSCoding 인터페이스를 구현해야합니다

- (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'로 코딩되며 다른 객체의 멤버 인 모든 객체는 개별 객체가 아닌 해당 ID로 인코딩됩니다. 그렇게하면 재귀 객체를 사용하는 것이 안전 할 수 있습니다.