Come faccio a serializzare un oggetto in un file utilizzando NSKeyedArchiver in formato NSPropertyListXMLFormat_v1_0?

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

Domanda

Si spera che il titolo è abbastanza chiaro. In ogni modo, a quanto pare:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

è limitato a NSPropertyListBinaryFormat_v1_0.

Ho bisogno il formato di essere leggibile [così xml]. Se siete interessati, questo fa parte del progetto sarò finalmente messo su github con un post su "Come GPS Unit Test delle applicazioni"

: -)

È stato utile?

Soluzione

Devi usare NSPropertyListSerialization per convertirlo. In sostanza, assumendo l'oggetto che si sta serializzazione si chiama myObject e il file finale è memorizzato in myPath, si serializzare in XML usando qualcosa come il seguente frammento di codice:

NSString *error = nil;
NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];
NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject
                        format:NSPropertyListXMLFormat_v1_0
                        errorDescription:&error]:
if( xmlData ) {
    [xmlData writeToFile:myPath atomically:YES];
} else {
    NSLog(error);
    [error release];
}

Altri suggerimenti

Invece di utilizzare il metodo di classe, provare a creare un'istanza di NSKeyedArchiver e l'utilizzo di setOutputFormat:NSPropertyListXMLFormat_v1_0 per specificare formato XML. L'unico inconveniente è che ci vorrà un paio di righe di codice in più dal momento che per gestire effettivamente la serializzazione, non sarà solo restituire un oggetto NSData in un solo passaggio.

Si dovrà codificare la classe di oggetti utilizzando il metodo - (void) encodeWithCoder (NSCoder *) encoder {

[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];

}

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