【问题标题】:iOS XML writer classiOS XML 编写器类
【发布时间】:2010-10-19 15:24:46
【问题描述】:

我想创建一个使用关卡系统的游戏。所以我想存储我的关卡并能够在游戏期间更改它们(以保存状态)。所以我决定使用 XML 来存储关卡。我找到了用于读取 XML 的 NSXmlParser 类,但我找不到保存关卡状态的编写器。在我的游戏中,关卡状态和关卡非常相似(我有很多可移动的对象),所以我不想将关卡状态数据与其所属的关卡分开存储。问题是我找不到在 iPhone 上轻松修改 XML 文件的方法。也许我使用了不好的方法。

【问题讨论】:

    标签: iphone objective-c xml


    【解决方案1】:

    如果您将数据放在NSDictionary 中,您可以这样做(需要注意):

    [myDictionary writeToFile:pathToPlist atomically:YES];
    

    【讨论】:

    • 这是不使用 xml 的,是吗?
    • @Andrew 生成的文件将是 XML(特别是 Plist 格式)
    【解决方案2】:

    试试开源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>
    

    【讨论】:

    • LGPL 不是(在我看来)iOS 项目的好许可证。这意味着如果我想使用您的代码,我有义务以可重新链接的形式发布我的应用程序(即,我必须发布目标文件,我可以这样做,但这是一堆额外的麻烦)。您是否考虑过使用 Mozilla 公共许可证?它要求人们发布他们对 MPL 许可文件所做的更改,但不要求发布目标文件。
    • 每个人的麻烦越少越好。我已经添加了 GNU 全许可许可证,因为无论如何,任何第三方都不会在任何一天对库进行任何更改。
    【解决方案3】:

    我建议使用KissXML。作者从与您类似的情况开始,并围绕 libxml 创建了一个与 NSXML 兼容的 API 包装器。他在博客上讨论了选项和决定here

    【讨论】:

    【解决方案4】:

    您可以使用 C 库 libxml2 来读写 XML。这是一个简短的介绍:Cocoa Samurai: Getting Some XML Love with libXML2

    但是,您是否考虑过使用 CoreData 或实现 NSCoding 协议? NSCoding 会更容易添加到现有的类中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多