2010-10-19 12 views
7

Quiero crear un juego que use un sistema de niveles. Así que quiero almacenar mis niveles y poder cambiarlos durante el juego (para guardar el estado). Entonces decidí usar XML para almacenar niveles. Encontré la clase NSXmlParser para leer desde XML, pero no puedo encontrar un escritor para guardar el estado del nivel. En mi juego, el nivel de estado y el nivel son muy similares (tengo muchos objetos móviles), así que no quiero almacenar los datos de estado de nivel separados del nivel al que pertenece. El problema es que no puedo encontrar una forma de modificar fácilmente los archivos XML en iPhone. Tal vez estoy usando un mal enfoque.iOS XML writer class

Respuesta

3

Puede usar la biblioteca C libxml2 para leer y escribir en XML. Aquí hay una introducción rápida: Cocoa Samurai: Getting Some XML Love with libXML2.

Sin embargo, ¿ha considerado usar CoreData o implementar el protocolo NSCoding? NSCoding sería más fácil de agregar a las clases existentes.

5

Si tiras los datos en un NSDictionary, se puede hacer (con salvedades):

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

esto es sin uso de xml, ¿sí? – Andrew

+0

@Andrew el archivo resultante será XML (específicamente, en formato Plist) –

5

Prueba el código abierto XML stream writer for iOS:

  • escrito en Objective-C, una sola .h . y el archivo .m
  • Una @protocol para el soporte de espacio de nombres y otra para sin

Ejemplo:

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

Esto produce la siguiente cadena XML:

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

LGPL no es (en mi opinión) una buena licencia para proyectos iOS. Significa que si quiero usar tu código, estoy obligado a liberar mi aplicación en una forma re-vinculable (es decir, tengo que liberar los archivos objeto, lo que podría hacer, pero es un montón de molestias adicionales). ¿Ha considerado utilizar la Licencia pública de Mozilla en su lugar? Obliga a las personas a publicar los cambios que realizan en los archivos con licencia de MPL, pero no requiere que se liberen los archivos del objeto. – JosephH

+2

Cuanto menos molestias para todos, mejor. He agregado la licencia permisiva de GNU, ya que de todos modos no se realizarán cambios de terceros a la biblioteca en cualquier momento. – ThomasRS

5

yo recomendaría usar KissXML. El autor comenzó en una situación similar a la tuya y creó un envoltorio API compatible con NSXML alrededor de libxml. Él discute las opciones y decisiones here en su blog.

+1

Además, este es posiblemente un duplicado de: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark

Cuestiones relacionadas