2010-10-19 4 views
7

Je veux créer un jeu qui utilisera un système de niveau. Donc je veux stocker mes niveaux et pouvoir les changer pendant le jeu (pour sauver l'état). J'ai donc décidé d'utiliser XML pour stocker les niveaux. J'ai trouvé la classe NSXmlParser pour la lecture de XML, mais je ne peux pas trouver un écrivain pour sauvegarder l'état du niveau. Dans mon jeu, l'état de niveau et le niveau sont très similaires (j'ai beaucoup d'objets mobiles), donc je ne veux pas stocker les données d'état de niveau séparées du niveau auquel elles appartiennent. Le problème est que je ne peux pas trouver un moyen de modifier facilement les fichiers XML sur iPhone. Peut-être que j'utilise une mauvaise approche.iOS XML writer class

Répondre

3

Vous pouvez utiliser la bibliothèque C libxml2 pour lire et écrire du code XML. Voici une introduction rapide: Cocoa Samurai: Getting Some XML Love with libXML2.

Cependant, avez-vous envisagé d'utiliser CoreData ou d'implémenter le protocole NSCoding? NSCoding serait plus facile à ajouter aux classes existantes.

5

Si vous jetez les données dans un NSDictionary, vous pouvez faire (avec des réserves):

[myDictionary writeToFile:pathToPlist atomically:YES]; 
+0

c'est sans utilisation de xml, oui? – Andrew

+0

@Andrew le fichier résultant sera XML (en particulier, en format Plist) –

5

Essayez l'open source XML stream writer for iOS:

  • écrit en Objective-C, un seul .h . et le fichier .m
  • Un @protocol pour le support d'espace de nom et un pour sans

Exemple:

// allocate serializer 
XMLWriter* xmlWriter = [[XMLWriter alloc]init]; 

// start writing XML elements 
[xmlWriter writeStartElement:@"Root"]; 
[xmlWriter writeCharacters:@"Text content for root element"]; 
[xmlWriter writeEndElement]; 

// get the resulting XML string 
NSString* xml = [xmlWriter toString]; 

Ce produit la chaîne XML suivante:

<Root>Text content for root element</Root> 
+0

LGPL n'est pas (à mon avis) une bonne licence pour les projets iOS. Cela signifie que si je veux utiliser votre code, je suis obligé de libérer mon application sous une forme reliable (c'est-à-dire que je dois libérer les fichiers objet, ce que je pourrais faire mais c'est un tas de tracas supplémentaires). Avez-vous envisagé d'utiliser la licence publique Mozilla à la place? Cela oblige les utilisateurs à publier les modifications qu'ils apportent aux fichiers sous licence MPL, mais ne nécessite pas la publication des fichiers objet. – JosephH

+2

Le moins de tracas pour tout le monde, mieux c'est. J'ai ajouté la licence GNU tout-permissive, car ce n'est pas comme si des changements de tiers seraient apportés à la bibliothèque d'ici peu de temps en temps. – ThomasRS

5

Je recommanderais d'utiliser KissXML. L'auteur a commencé dans une situation similaire à celle de vous et a créé un wrapper API compatible NSXML autour de libxml. Il discute des options et des décisions here sur son blog.

+1

Aussi, c'est peut-être un doublon de: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark