프로그래밍 방식으로 nscoding을 사용하여 생성 된 객체 모델을로드합니다

StackOverflow https://stackoverflow.com/questions/1030467

문제

애플리케이션의 버전 1.0에는 모든 모델 클래스가 NSCoding 프로토콜을 준수하므로 NSKeyed (UN) 아치 클래스를 사용하여 저장/로드되는 데이터 모델이 있습니다. 다음 계층이 존재한다고 가정합니다.

-> Houses (NSMutableArray)
-> -> House (Custom Object)
-> -> -> Color (3 ints, RGB)
-> -> -> Number of Residents (int)

이러한 방식으로 저장된 레거시 파일이 있지만 다음의 새로운 데이터 모델을 사용하여 거꾸로 호환성을 위해 응용 프로그램의 버전 2.0에로드해야한다고 가정 해보십시오.

-> Neighborhood (Maintains NSMutableArray, among other properties)
-> -> TownHouse
-> -> -> Color (3 ints, RGB)
-> -> -> Occupants (NSMutableArray)
-> -> (Other types of houses)

분명히 일부 데이터가 누락되어 채워질 필요가 있습니다. 예를 들어. 이전에 존재했던 각 "거주자 수"에 대해 기본적인 "탑승자"객체를 만들어야합니다. 내가 찾고있는 것은 이전 데이터 모델에서 프로그래밍 방식으로로드하는 방법입니다. 특히 .m/.h 파일 자체가 아닌 클래스/계층 구조 목록 만있는 경우.

그래서 내가하고 싶은 것은 (파일 houses.data가 있다고 가정합니다.

NSFile *legacyFile;
Neighborhood *hood = [Neighborhood neighborhoodFromLegacyFile:legacyFile];

어떤 아이디어?

도움이 되었습니까?

해결책

여기서 속임수는 setclass : forclassname : nskeyedunarchiver가 제공하는 함수를 사용하는 것입니다. "클래스 타운 하우스를 사용하여 클래스 하우스의 모든 사례를 사로화하십시오."

그런 다음 타운 하우스의 InitwithCoder : 함수를 수정하여 계층 구조를 해독하려면 기능을 수정해야합니다. DecodeObject 또는 DecodeObjectForKey를 호출하여이를 달성 할 수 있습니다. 그런 다음 iSkindofClass를 사용하여 어떤 유형의 객체를 처리하는지 확인하십시오. ContainsValueforKey : 읽기 전에 특정 키를 확인하려면 사용할 수 있습니다.

도움이되기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top