Google 검색 및 검색 결과에 아무런 간단한 결과가 없습니다. Apple 문서에서 다음과 같은 근본적인 오해가있는 것 같습니다.iOS : Archiving NSMutableArray
아카이브는 임의로 복잡한 개체 그래프를 저장할 수 있습니다. 아카이브는 그래프에있는 모든 오브젝트의 ID와 그래프에있는 다른 모든 오브젝트와 가진 모든 관계를 보존합니다. 이 아카이브되지 않은 경우 재 작성된 오브젝트 그래프는 거의 예외없이 원래 오브젝트 그래프의 정확한 사본 이어야합니다.
NSMutableArray
이 Person
개체의 컬렉션이라고 가정합니다. 각 Person
개체는 initWithCoder
및 encodeWithCoder
을 구현합니다. 또한, 임의의 주어진 Person
은 Task
의 객체 (유사하게 코딩 호환)의 NSMutableArray
을 가질 수있다.
필자는 코딩 프로토콜의 구현에 따라 임의의 깊이에 대한 계단식 직렬화를 보관하고 보관하는 방법을 알고 있습니다. 그래서 내보기 컨트롤러, I는 않는 willEnterBackground
있습니다
data = [NSKeyedArchiver archivedDataWithRootObject:self.people];
// persist to NSUserDefaults
을 내가 않는 viewDidLoad
이 : 이런 모든
// read from NSUserDefaults
self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data];
,하지만 두 가지 :
people
배열에 포함 된 개체의initWithCoder
및encodeWithCoder
은 호출되지 않습니다.- 놀랍게도 결과적으로
self.people
은 NSMutableArray 크기가 0입니다. 놀랍게도 보관되지 않은 데이터는 252 바이트 길이로 올바르게 표시됩니다.
제안 사항? 힌트?