2010-10-19 8 views
7

Desidero creare un gioco che utilizzi un sistema di livello. Quindi voglio memorizzare i miei livelli e poterli cambiare durante il gioco (per salvare lo stato). Così ho deciso di usare XML per memorizzare i livelli. Ho trovato la classe NSXmlParser per la lettura da XML, ma non riesco a trovare uno scrittore per salvare lo stato del livello. Nel mio gioco lo stato del livello e il livello sono molto simili (ho molti oggetti mobili), quindi non voglio memorizzare i dati dello stato del livello separati dal livello a cui appartiene. Il problema è che non riesco a trovare un modo per modificare facilmente i file XML su iPhone. Forse sto usando un approccio sbagliato.Classe scrittore XML iOS

risposta

3

È possibile utilizzare la libreria C libxml2 per leggere e scrivere XML. Ecco una breve introduzione: Cocoa Samurai: Getting Some XML Love with libXML2.

Tuttavia, hai considerato l'utilizzo di CoreData o l'implementazione del protocollo NSCoding? NSCoding sarebbe più facile da aggiungere alle classi esistenti.

5

Se gettate i dati in un NSDictionary, si potrebbe fare (con avvertimenti):

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

questo è senza uso di xml, sì? – Andrew

+0

@Andrew il file risultante sarà XML (in particolare, in formato Plist) –

5

provare il open source XML stream writer for iOS:

  • Scritto in Objective-C, un singolo .h . e il file .m
  • Uno @protocol per il supporto dello spazio dei nomi e una per senza

Esempio:

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

Questo produce la seguente stringa XML:

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

LGPL non è (a mio avviso) una buona licenza per i progetti iOS. Significa che se voglio usare il tuo codice, sono obbligato a rilasciare la mia domanda in un modulo ricollegabile (cioè devo rilasciare i file oggetto, cosa che potrei fare ma è un mucchio di problemi extra). Hai preso in considerazione l'utilizzo della licenza pubblica Mozilla? Obbliga le persone a rilasciare le modifiche apportate ai file con licenza MPL, ma non richiede il rilascio dei file oggetto. – JosephH

+2

Meno problemi per tutti, meglio è. Ho aggiunto la licenza GNU permissiva, in quanto non è come le modifiche di terze parti saranno apportate alla libreria ogni giorno a breve comunque. – ThomasRS

5

mi consiglia di utilizzare KissXML. L'autore è partito da te in una situazione simile e ha creato un wrapper API compatibile con NSXML attorno a libxml. Discute le opzioni e le decisioni here sul suo blog.

+1

Inoltre, questo è probabilmente un duplicato di: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark

Problemi correlati