2012-07-31 2 views
1

Google 검색 및 검색 결과에 아무런 간단한 결과가 없습니다. Apple 문서에서 다음과 같은 근본적인 오해가있는 것 같습니다.iOS : Archiving NSMutableArray

아카이브는 임의로 복잡한 개체 그래프를 저장할 수 있습니다. 아카이브는 그래프에있는 모든 오브젝트의 ID와 그래프에있는 다른 모든 오브젝트와 가진 모든 관계를 보존합니다. 이 아카이브되지 않은 경우 재 작성된 오브젝트 그래프는 거의 예외없이 원래 오브젝트 그래프의 정확한 사본 이어야합니다.

NSMutableArrayPerson 개체의 컬렉션이라고 가정합니다. 각 Person 개체는 initWithCoderencodeWithCoder을 구현합니다. 또한, 임의의 주어진 PersonTask의 객체 (유사하게 코딩 호환)의 NSMutableArray을 가질 수있다.

필자는 코딩 프로토콜의 구현에 따라 임의의 깊이에 대한 계단식 직렬화를 보관하고 보관하는 방법을 알고 있습니다. 그래서 내보기 컨트롤러, I는 않는 willEnterBackground 있습니다

data = [NSKeyedArchiver archivedDataWithRootObject:self.people]; 
// persist to NSUserDefaults 

을 내가 않는 viewDidLoad이 : 이런 모든

// read from NSUserDefaults 
self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

,하지만 두 가지 :

  1. people 배열에 포함 된 개체의 initWithCoderencodeWithCoder은 호출되지 않습니다.
  2. 놀랍게도 결과적으로 self.people은 NSMutableArray 크기가 0입니다. 놀랍게도 보관되지 않은 데이터는 252 바이트 길이로 올바르게 표시됩니다.

제안 사항? 힌트?

답변

2

두 가지 방법을 구현했지만 Person 클래스를 프로토콜에 포함하도록 선언 했습니까?