2011-11-03 15 views
8

Sto costruendo un'applicazione che utilizza NSCoding per salvare NSObject in un documentoPath. Non ho problemi a farlo, sono solo curioso di qualcosa.Cosa succede a un oggetto NSArray durante la codifica?

Ho MACcompany, che implementa i metodi delegati 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 

} 

Come si può vedere, ho un NSArray di NSObjects personalizzati (MAStore). Ognuno di questi oggetti implementa anche lo stesso NSCoding, cosa no.

Tuttavia, la mia domanda è, quando chiamo encodeWithCoder:(NSCoder *)encoder metodo Mastore, e si arriva al [encoder encodeObject:stores forKey:kStores], saranno tutti gli oggetti memorizzati all'interno del stores NSArray hanno chiamato il metodo encoderWithCoder:(NSCoder *)encoder se attuate?

EDIT

Il motivo che mi sto chiedendo questo è che voglio sapere se sia o non funzionerà prima di investire tempo nel fare una cosa del genere. Ho più NSObjects personalizzati con NSArrays che contengono più NSObjects personalizzati. Sarebbe un processo lungo per scoprire che non funziona.

risposta

11

Sì. L'encoder entra ricorsivamente in oggetti contenitore (array, dizionari, insiemi, ecc.) E codifica anche tutti questi oggetti. Otterrai un'eccezione se uno degli oggetti interni non supporta NSCoding.

+0

Grazie mille! : D –

Problemi correlati