2010-10-19 19 views
7

Chcę utworzyć grę, która będzie korzystać z systemu poziomów. Więc chcę przechowywać moje poziomy i móc je zmieniać podczas gry (aby zapisać stan). Postanowiłem więc użyć XML do przechowywania poziomów. Znalazłem NSXmlParser klasy do czytania z XML, ale nie mogę znaleźć pisarz, aby zapisać stan poziomu. W mojej grze stan poziomu i poziom są bardzo podobne (mam dużo ruchomych obiektów), więc nie chcę przechowywać danych stanu poziomu oddzielonych od poziomu, do którego należy. Problem polega na tym, że nie mogę znaleźć sposobu łatwego modyfikowania plików XML na iPhonie. Może używam złego podejścia.Pisarz XML iOS klasa

Odpowiedz

3

Możesz użyć biblioteki C libary libxml2 do odczytu i zapisu XML. Oto krótkie wprowadzenie: Cocoa Samurai: Getting Some XML Love with libXML2.

Czy zastanawiałeś się jednak nad używaniem CoreData lub implementacją protokołu NSCoding? NSCoding byłoby łatwiej dodać do istniejących klas.

5

Jeśli rzucisz dane w NSDictionary, można zrobić (z zastrzeżeniami):

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

to bez użycia xml, tak? – Andrew

+0

@Andrew wynikowy plik będzie XML (konkretnie w formacie Plist) –

5

Spróbuj open source XML stream writer for iOS:

  • napisane w Objective-C, pojedynczy .h . i .m plik
  • Jeden @protocol wsparcie dla przestrzeni nazw i jeden bez

Przykład:

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

To daje następujący ciąg znaków XML:

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

LGPL nie jest (moim zdaniem) dobrą licencją na projekty iOS. Oznacza to, że jeśli chcę użyć twojego kodu, jestem zobowiązany do wydania mojej aplikacji w postaci do ponownego połączenia (tj. Muszę zwolnić pliki obiektów, co mogłem zrobić, ale jest to dodatkowa trudność). Czy rozważałeś zamiast tego używać Publicznej Licencji Mozilli? To zobowiązuje ludzi do wydania zmian, które wprowadzają do plików licencjonowanych MPL, ale nie wymaga zwolnienia plików obiektów. – JosephH

+2

Im mniej kłopotów dla wszystkich, tym lepiej. Dodałem licencję GNU z pełną permisywnością, ponieważ nie jest tak, że jakiekolwiek zmiany stron trzecich zostaną wprowadzone do biblioteki w najbliższym czasie. – ThomasRS

5

Polecam korzystania KissXML. Autor rozpoczął w podobnej sytuacji jak ty i stworzył wrapper API kompatybilny z NSXML wokół libxml. Omawia opcje i decyzje here na swoim blogu.

+1

Może to być również duplikat: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark

Powiązane problemy