2010-10-19 17 views
7

Ich möchte ein Spiel erstellen, das ein Level-System verwenden wird. Also möchte ich meine Levels speichern und sie während des Spiels ändern können (um den Staat zu retten). Also entschied ich mich, XML zum Speichern von Ebenen zu verwenden. Ich habe die NSXmlParser-Klasse zum Lesen aus XML gefunden, aber ich kann keinen Writer finden, der den Level-Status speichert. In meinem Spiel sind der Level-Zustand und das Level sehr ähnlich (ich habe viele bewegliche Objekte), daher möchte ich die Level-State-Daten nicht getrennt von der Ebene speichern, zu der sie gehört. Das Problem ist, dass ich keine Möglichkeit finde, XML-Dateien auf dem iPhone einfach zu ändern. Vielleicht benutze ich einen schlechten Ansatz.iOS XML Writer Klasse

Antwort

3

Sie können die C-Bibliothek libxml2 verwenden, um XML zu lesen und zu schreiben. Hier ist eine kurze Einführung: Cocoa Samurai: Getting Some XML Love with libXML2.

Haben Sie jedoch in Erwägung gezogen, CoreData zu verwenden oder das Protokoll NSCoding zu implementieren? NSCoding wäre einfacher zu bestehenden Klassen hinzuzufügen.

5

Wenn Sie die Daten in einem NSDictionary werfen, könnte man (mit Einschränkungen) tun:

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

Dies ist ohne XML-Nutzung, ja? – Andrew

+0

@Andrew die resultierende Datei wird XML sein (speziell im Plist-Format) –

5

Versuchen Sie, die Open-Source-XML stream writer for iOS:

  • Geschrieben in Objective-C, ein einzelner .h . und .m-Datei
  • One @protocol für Namespace-Unterstützung und ein für ohne

Beispiel:

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

Dies erzeugt den folgenden XML-String:

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

LGPL ist nicht (meiner Meinung nach) eine gute Lizenz für iOS-Projekte. Es bedeutet, wenn ich Ihren Code verwenden möchte, bin ich verpflichtet, meine Anwendung in einer wiederverlinkbaren Form zu veröffentlichen (dh ich muss die Objektdateien freigeben, was ich tun könnte, aber es ist ein Haufen zusätzlicher Ärger). Haben Sie in Erwägung gezogen, stattdessen die Mozilla Public License zu verwenden? Es verpflichtet die Benutzer, Änderungen an den MPL-lizenzierten Dateien freizugeben, erfordert jedoch nicht, dass die Objektdateien freigegeben werden. – JosephH

+2

Je weniger Ärger für alle, desto besser. Ich habe die GNU all-permissive Lizenz hinzugefügt, da es sowieso nicht so ist, dass irgendwelche Änderungen an der Bibliothek vorgenommen werden. – ThomasRS

5

ich empfehlen würde mit KissXML. Der Autor begann in einer ähnlichen Situation wie Sie und erstellte einen NSXML-kompatiblen API-Wrapper um libxml. Er diskutiert die Optionen und Entscheidungen here auf seinem Blog.

+1

Auch dies ist möglicherweise ein Duplikat von: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark