2011-11-03 11 views
8

Buduję aplikację, która używa NSCoding, aby zapisać obiekty NSObject do klasy documentPath. Nie mam żadnych problemów z tym, jestem po prostu ciekawa.Co dzieje się z obiektem NSArray podczas kodowania?

Mam MACompany, która implementuje metody delegatów NSCoding.

- (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 

} 

Jak widać, mam NSArray niestandardowych NSObjects (MAStore). Każdy z tych obiektów implementuje te same NSCoding, co nie.

Jednak moje pytanie brzmi, kiedy zadzwonić encodeWithCoder:(NSCoder *)encoder metodę w MAStore, i dostaje się do [encoder encodeObject:stores forKey:kStores], wszystkie obiekty będą przechowywane w stores NSArray się nazywa metoda encoderWithCoder:(NSCoder *)encoder jeśli realizowane?

EDIT

Powód pytam jest to, że chcę wiedzieć, czy to będzie działać, zanim zainwestować czas robiąc coś takiego. Mam wiele niestandardowych obiektów NSObject z NSArrays, które posiadają więcej niestandardowych obiektów NSObject. Byłoby długim procesem stwierdzenie, że nie działa.

Odpowiedz

11

Tak. Enkoder rekurencyjnie wchodzi do obiektów kontenerowych (tablic, słowników, zestawów itp.) I koduje również wszystkie te obiekty. Uderzysz w wyjątek, jeśli jeden z obiektów wewnętrznych nie obsługuje NSCoding.

+0

Dziękuję bardzo! :RE –

Powiązane problemy