Comment puis-je sérialiser un objet à déposer à l'aide NSKeyedArchiver au format NSPropertyListXMLFormat_v1_0?

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

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 »

: -)

Était-ce utile?

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

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top