2011-11-03 2 views
8

NSCoding을 사용하여 NSObject를 documentPath에 저장하는 응용 프로그램을 빌드하고 있습니다. 이 작업을 수행하는 데 문제가 없습니다. 단지 뭔가 궁금합니다.인코딩 할 때 NSArray 객체는 어떻게됩니까?

나는 대리인 메서드를 NSCoding 구현하는 MACompany 있습니다.

- (void) encodeWithCoder:(NSCoder *)encoder { 

    [encoder encodeObject:address_1 forKey:kAddress_1]; 
    [encoder encodeObject:address_2 forKey:kAddress_2]; 
    [encoder encodeObject:city_town forKey:kCity_Town]; 
    [encoder encodeObject:company_name forKey:kCompany_Name]; 
    [encoder encodeObject:country forKey:kCountry]; 
    [encoder encodeObject:date_added forKey:kDate_Added]; 
    [encoder encodeObject:fax forKey:kFax]; 
    [encoder encodeObject:parent_company_website forKey:kWebsite]; 
    [encoder encodeObject:postal_code forKey:kPostal_Code]; 
    [encoder encodeObject:state_province forKey:kState_Province]; 
    [encoder encodeObject:type forKey:kType]; 

    [encoder encodeObject:stores forKey:kStores]; //NSArray of custom NSObjects 

} 

위에서 알 수 있듯이 NSArray에는 사용자 지정 NSObject (MAStore)가 있습니다. 이 객체들 각각은 또한 동일한 NSCoding을 구현하지 않습니다. 구현 경우

는 그러나, 나는 MAStore에 encodeWithCoder:(NSCoder *)encoder 메소드를 호출하고,이 [encoder encodeObject:stores forKey:kStores]에 도달 할 때 내 질문에,이다의 encoderWithCoder:(NSCoder *)encoder 방법이라는 stores있는 NSArray에 저장된 모든 객체는 것?

편집

나는이 부탁 해요 이유는 내가 그런 일을에 시간을 투자하기 전에 작동됩니다 여부를 알고 싶어한다는 것입니다. 더 많은 사용자 지정 NSObject를 보유하는 NSArrays가있는 여러 사용자 지정 NSObject가 있습니다. 그것이 작동하지 않는다는 것을 발견하는 것은 긴 과정 일 것입니다.

답변

11

예. 인코더는 컨테이너 객체 (배열, 사전, 집합 등)로 반복적으로 들어가고 모든 객체를 인코딩합니다. 내부 오브젝트 중 하나가 NSCoding을 지원하지 않으면 예외가 발생합니다.

+0

대단히 감사합니다! :디 –