2009-04-07 9 views
0

J'espère que ce titre est assez clair. Quoi qu'il en soit, il semble:Comment sérialiser un objet dans un fichier à l'aide de NSKeyedArchiver au format NSPropertyListXMLFormat_v1_0?

[NSKeyedArchiver archiveRootObject:rootObject toFile:path]; 

est limitée à NSPropertyListBinaryFormat_v1_0.

J'ai besoin que le format soit lisible par un humain [donc xml]. Si vous êtes intéressé, cela fait partie du projet, je vais éventuellement mis sur github avec un billet de blog sur « Comment Test Unit Applications GPS »

:-) de

Répondre

6

Vous devez utiliser NSPropertyListSerialization pour convertir il. 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 en XML en utilisant 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]; 
} 
+0

Merci Jason! Je suis en train de tester ça maintenant. –

+1

comment rendre cet objet? – Krish

6

Au lieu d'utiliser la méthode de classe, essayez de créer une instance de NSKeyedArchiver et d'utiliser setOutputFormat:NSPropertyListXMLFormat_v1_0 pour spécifier le format XML. Le seul inconvénient est qu'il faudra quelques lignes de code supplémentaires puisque pour gérer réellement la sérialisation, il ne retournera pas seulement un objet NSData en une seule étape.

0

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

}