¿Cómo puedo serializar un objeto a presentar utilizando NSKeyedArchiver en formato NSPropertyListXMLFormat_v1_0?

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

Pregunta

Con suerte que el título es lo suficientemente clara. De todas formas, lo que parece:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

está restringido a NSPropertyListBinaryFormat_v1_0.

necesito el formato para ser legible por humanos [por lo XML]. Si le interesa, esto es parte del proyecto que finalmente va a poner arriba en github con un post sobre "cómo poner a prueba la unidad GPS Aplicaciones"

: -)

¿Fue útil?

Solución

Usted tiene que usar NSPropertyListSerialization para convertirlo. Básicamente, suponiendo que el objeto que está serialización se llama myObject y el archivo se almacena en definitiva myPath, que le serializar a XML usando algo como el siguiente fragmento de código:

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];
}

Otros consejos

En lugar de utilizar el método de clase, intente crear una instancia de NSKeyedArchiver y el uso de setOutputFormat:NSPropertyListXMLFormat_v1_0 para especificar el formato XML. El único inconveniente es que va a tomar unas pocas líneas de código adicionales para manejar desde la serialización en realidad, no sólo va a devolver un objeto NSData en un solo paso.

Usted tendrá que codificar la clase de objeto mediante el método - (void) encodeWithCoder (NSCoder *) codificador {

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

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top