在iOS上保存xml文件(pugiXml和Cocos2d-x)

在iOS上保存xml文件(pugiXml和Cocos2d-x),ios,xml,cocos2d-x,pugixml,Ios,Xml,Cocos2d X,Pugixml,最近,我在pugiXml(在cocos2d-x引擎中使用)方面遇到了一个大问题 很快,我做了一个问答游戏(在Cocos2d-x中提到)。我将问题(和一些其他数据)保存在一个Xml文件中。在新游戏中,它们被解析并插入字典。如果回答了一个问题,则会在该Xml文件中插入一个指示答案的短字符串(无论答案是否正确-Y/N)(位于该特定问题的下方)。稍后,我使用这些数据来显示统计数据(我计算得到正确答案的问题的百分比,即计算Y的数量除以问题的数量,再乘以100) 我使用: CCFileUtils::shar

最近,我在pugiXml(在cocos2d-x引擎中使用)方面遇到了一个大问题

很快,我做了一个问答游戏(在Cocos2d-x中提到)。我将问题(和一些其他数据)保存在一个Xml文件中。在新游戏中,它们被解析并插入字典。如果回答了一个问题,则会在该Xml文件中插入一个指示答案的短字符串(无论答案是否正确-Y/N)(位于该特定问题的下方)。稍后,我使用这些数据来显示统计数据(我计算得到正确答案的问题的百分比,即计算Y的数量除以问题的数量,再乘以100)

我使用:

CCFileUtils::sharedFileUtils()->fullPathForFilename(o_QA);
要获取文件,请稍后重试

pBuffer = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), "rb", &bufferSize);
将文件放入缓冲区并

pugi::xml_parse_result result = doc.load_buffer(pBuffer,bufferSize);
解析数据并开始处理它

最后,我使用以下命令保存文件:

doc.save_file(fullPath.c_str());
安卓:

  • 虽然我不得不将带有问题的文件复制到/data/data/app/Files/,但它工作得非常好。尽管如此,它仍在许多设备上保留更改
iOS:

  • 不幸的是,在iOS上它不起作用。数据被加载和解析(这意味着,我实际上可以玩游戏),但它们不会被保存。我尝试将文件移动到其他文件夹(从资源/文档开始,然后是主资源文件夹、资源/库/应用程序支持)。它仍然没有保存数据,我不知道该怎么办。结果是我的统计数据没有得到很好的统计(不管你如何回答问题——所有这些都是错误的,因为Xml文件没有被更新)
有没有人遇到过类似的问题?
你能帮帮我吗?

我正在自己的应用程序中做类似的事情,同时使用pugixml和cocos2d-x。所以我可以确认这种组合效果很好

相反,因为在iOS上,您无法同时从应用程序包读取数据和向应用程序包写入数据(只读),因此您需要在可写文档目录中执行简单的检查-如果您在其中保存了文件,请将其加载,否则,请从应用程序包加载

因此,从本质上讲,如果您保存的文件名是“my_save.xml”,那么下面是一个示例流:

1) 通过连接可写文件夹路径+文件名,为可写文件夹中的保存文件构造一个路径。CCFileUtils应该具有类似于getWritablePath()的功能

2) 如果文件夹中存在该文件,请加载它。否则,请转到3)

3) 使用CCFileUtils::sharedFileUtils()->fullPathForFilename()从应用程序包构建到原始数据文件的路径。从那里加载文件


要保存,只需执行步骤1并将文件保存在那里。

我在自己的应用程序中使用pugixml和cocos2d-x执行类似的操作。所以我可以确认这种组合效果很好

相反,因为在iOS上,您无法同时从应用程序包读取数据和向应用程序包写入数据(只读),因此您需要在可写文档目录中执行简单的检查-如果您在其中保存了文件,请将其加载,否则,请从应用程序包加载

因此,从本质上讲,如果您保存的文件名是“my_save.xml”,那么下面是一个示例流:

1) 通过连接可写文件夹路径+文件名,为可写文件夹中的保存文件构造一个路径。CCFileUtils应该具有类似于getWritablePath()的功能

2) 如果文件夹中存在该文件,请加载它。否则,请转到3)

3) 使用CCFileUtils::sharedFileUtils()->fullPathForFilename()从应用程序包构建到原始数据文件的路径。从那里加载文件


要保存,只需执行步骤1并将文件保存在那里。

如何获取文档目录?检查此项:我正在使用fullPathForFilename方法(o_QA是一个字符串)执行此操作。我尝试使用o_QA值,如“Documents/Questions.xml”(在参考资料中创建文档文件夹)、“Questions.xml”(在参考资料文件夹中创建Questions.xml)或“Libary/Application Support/Questions.xml”(在参考资料文件夹中创建库/应用程序支持文件夹结构)。我错了吗?我是否应该首先获得另一个指向Documents文件夹(类似于Android)的路径,该文件夹不是在参考资料中创建的文件夹?在那之后,把我的文件复制到那里,然后处理复制的文件?你知道(在cocos2d-x中)获取这样一个文件夹的方法吗?听起来你试图写入应用程序包中的路径,但这行不通,捆绑包是只读的。是的,您需要使用iOS系统方法获取documents目录以获取这些路径,因为它们位于应用程序沙盒目录中捆绑包之外。如何获取documents目录?检查此项:我正在使用fullPathForFilename方法(o_QA是一个字符串)执行此操作。我尝试使用o_QA值,如“Documents/Questions.xml”(在参考资料中创建文档文件夹)、“Questions.xml”(在参考资料文件夹中创建Questions.xml)或“Libary/Application Support/Questions.xml”(在参考资料文件夹中创建库/应用程序支持文件夹结构)。我错了吗?我是否应该首先获得另一个指向Documents文件夹(类似于Android)的路径,该文件夹不是在参考资料中创建的文件夹?在那之后,把我的文件复制到那里,然后处理复制的文件?你知道(在cocos2d-x中)获取这样一个文件夹的方法吗?听起来你试图写入应用程序包中的路径,但这不起作用,该包是只读的。是的,你需要使用iOS系统方法获取文档目录来获取这些路径,因为它们位于应用程序沙盒目录中的包之外。