2010-10-19 21 views
7

我想創建一個遊戲,它將使用關卡系統。所以我想存儲我的關卡並能夠在遊戲過程中改變它們(以保存狀態)。所以我決定使用XML來存儲級別。我發現從XML讀取NSXmlParser類,但我找不到一個作家來保存級別狀態。在我的遊戲中,關卡狀態和關卡非常相似(我有很多可移動的對象),所以我不想存儲與它所屬關卡分開的關卡狀態數據。問題是,我無法找到一種方法來輕鬆修改iPhone上的XML文件。也許我正在使用一種不好的方法。iOS XML編寫器類

回答

3

您可以使用C庫文件libxml2來讀取和寫入XML。這是一個快速介紹:Cocoa Samurai: Getting Some XML Love with libXML2

但是,您是否考慮過使用CoreData或實施NSCoding協議? NSCoding將更容易添加到現有的類。

5

如果您在NSDictionary拋出數據,你可以做(​​含警告):

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

這是沒有XML的用法,是嗎? – Andrew 2010-10-19 17:02:02

+0

@Andrew生成的文件將是XML(具體來說,以Plist格式) – 2010-10-19 17:16:09

5

嘗試開源XML stream writer for iOS

  • 用Objective-C,單.H 。和.m文件命名空間支持
  • 一個@protocol,一個用於無

例子:

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

這將產生以下XML字符串:

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

LGPL不是(在我看來)iOS項目的良好許可證。這意味着如果我想使用你的代碼,我有義務以可重新鏈接的形式發佈我的應用程序(即,我必須發佈目標文件,我可以這樣做,但這是一堆額外的麻煩)。你有沒有考慮過使用Mozilla Public License?它強制人們釋放他們對MPL許可文件所做的更改,但不要求發佈目標文件。 – JosephH 2011-02-15 17:15:33

+2

每個人的麻煩越少越好。我已經添加了GNU全容許許可證,因爲它不像任何第三方對圖書館的更改很快就會在任何一天發生。 – ThomasRS 2011-02-15 20:45:21

5

我會建議使用KissXML。作者以與您類似的情況開始創建一個圍繞libxml的兼容NSXML的API包裝器。他在他的博客上討論了選項和決定here

+1

此外,這可能是重複的:http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark 2010-10-19 23:16:33