Comment puis-je sérialiser un objet à déposer à l'aide NSKeyedArchiver au format NSPropertyListXMLFormat_v1_0?
-
05-09-2019 - |
Question
Il faut espérer que le titre est assez clair. Quoi qu'il en soit, il semble:
[NSKeyedArchiver archiveRootObject:rootObject toFile:path];
est limitée à NSPropertyListBinaryFormat_v1_0
.
J'ai besoin le format pour être lisible par l'homme [si xml]. Si vous êtes intéressé, cela fait partie du projet que je vais finalement mis sur github avec un billet de blog sur « Comment l'unité de test GPS Applications »
: -)
La solution
Vous devez utiliser NSPropertyListSerialization
pour le convertir. En fait, en supposant que l'objet que vous sérialisation est appelé myObject
et le fichier final est stocké dans myPath
, vous sérialisation XML à l'aide de quelque chose comme le fragment de code suivant:
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];
}
Autres conseils
Au lieu d'utiliser la méthode de classe, essayez de créer une instance de NSKeyedArchiver et en utilisant setOutputFormat:NSPropertyListXMLFormat_v1_0
de spécifier le format XML. Le seul inconvénient est que ça va prendre quelques lignes de code supplémentaires depuis pour gérer réellement la sérialisation, il ne sera pas seulement renvoyer un objet NSData en une seule étape.
Vous devrez encoder la classe d'objet en utilisant la méthode - (void) encodeWithCoder (NSCoder *) {encodeur
[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];
}