2012-02-18 4 views
3

사용자 정의 클래스의 인스턴스로 채워지는 mainObjectArray (NSMutableArray)가 있습니다. 각 인스턴스는 그 자체로 배열이며 각 배열의 객체는 NSDates, NSStrings, BOOL 및 비슷한 객체를 포함하는 더 많은 배열입니다. 내가 설정할 수 없었던 무엇NSCoder - 여러 레벨의 중첩 배열을 사용하여 배열 인코딩

은 가능 여부하려면

내부 - (무효) encodeWithCoder : (NSCoder *) 인코더 방법, 그냥 할 말이 같은 :

[인코더 encodeWithObject : mainObjectArray];

또는 모든 인스턴스에서 모든 객체를 개별적으로 인코딩해야합니까? 이것은 약간의 고통이 될 것입니다 ...

귀하의 도움은 매우 감사하겠습니다.

+0

"각 인스턴스 자체가 배열"이라는 것은 무엇을 의미합니까? 단순히 사용자 정의 클래스 인스턴스 **에 배열 속성 **이 있다는 것을 의미합니까? 아니면 NSArray의 하위 클래스입니까? – yuji

+0

죄송합니다. 내 사용자 정의 클래스는 NSObject의 하위 클래스이며 속성으로 NSMutableArray, int, NSString, BOOL 및 NSDate가 있습니다. – Charl

+0

나는 이것과 매우 비슷한 문제가있다. 어떻게 내부에 선언 된 사용자 정의 객체의 NSArray를 사용하여 객체를 저장하려고합니까? – Stuartsoft

답변

5

사용자 정의 클래스에서 인코딩 및 디코딩 방법을 구현하기 만하면됩니다. 그렇게 할 것입니다. 일부 샘플

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:[NSNumber numberWithInt:pageNumber] forKey:@"pageNumber"]; 
    [encoder encodeObject:path forKey:@"path"]; 
    [encoder encodeObject:array forKey:@"array"]; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super init]) 
    { 
     self.pageNumber = [[aDecoder decodeObjectForKey:@"pageNumber"] intValue]; 
     self.path = [aDecoder decodeObjectForKey:@"path"]; 
     self.array = [aDecoder decodeObjectForKey:@"array"]; 
    } 
} 

인코딩, 디코딩되는 데이터 유형은 모두 int, string, array입니다.

희망이 도움이됩니다.

+0

안녕하세요 cocoakomali! 당신의 응답을 주셔서 감사합니다. 이해할 수없는 것은 위의 예제 에서처럼 배열을 인코딩 할 수 있다면 mainObjectArray에서 한 줄의 코드로 인코딩을 수행 할 수없는 이유는 무엇입니까? – Charl

+0

mainObjectArray는 사용자 정의 클래스로 만들어 졌으므로 이전처럼 메소드를 구현해야합니다. – cocoakomali

+0

나는 이것과 매우 비슷한 문제가있다. 어떻게 내부에 선언 된 사용자 정의 객체의 NSArray를 사용하여 객체를 저장하려고합니까? – Stuartsoft