Domanda

La versione 1.0 di un'applicazione ha un modello di dati, che viene salvato / caricato usando le classi NSKeyed (Un) Archiver, poiché tutte le classi di modelli aderiscono al protocollo NSCoding. Supponiamo che esista la seguente gerarchia:

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

Dire che ci sono file legacy memorizzati in questo modo, ma devono essere caricati nella versione 2.0 dell'applicazione per la compatibilità con le versioni precedenti, usando il seguente modello di dati più recente:

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

Ovviamente, alcuni dati mancheranno e dovranno essere compilati. Ad es. un "Occupante" di base; l'oggetto dovrà essere creato per ciascuno del "numero di residenti" che esisteva prima. Quello che sto cercando è un modo per caricare a livello di codice nel modello di dati precedente, soprattutto se ho solo un elenco delle classi / gerarchia e non i file .m / .h stessi.

Quindi quello che voglio fare è (supponendo che io abbia un file Houses.data, che è stato serializzato usando l'array Houses):

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

Qualche idea?

È stato utile?

Soluzione

Penso che il trucco qui sia usare setClass: forClassName: funzione fornita da NSKeyedUnarchiver. Ti permette di dire: " Usa la classe TownHouse per deserializzare tutte le istanze della classe House. & Quot;

Quindi è necessario modificare initWithCoder: la funzione TownHouse per decodificare una gerarchia. Puoi farlo chiamando decodeObject o decodeObjectForKey: e quindi usando isKindOfClass: per vedere con che tipo di oggetto hai a che fare. Puoi anche usare IncludesValueForKey: per verificare alcune chiavi prima di provare a leggerle.

Spero che sia d'aiuto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top