¿Cómo puedo serializar un objeto a presentar utilizando NSKeyedArchiver en formato NSPropertyListXMLFormat_v1_0?
-
05-09-2019 - |
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"
: -)
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"];
}