我正在使用cocos2d-x和C ++开发游戏,并且需要为此应用程序加载一堆YAML文件。我尝试使用yaml-cpp库,结果相当不错。
问题在于,该库似乎非常不稳定(至少在iOS上为cocos2d-x下),因为几乎有20%的时间它未能加载相同的YAML文件,并抛出“未找到地图结尾”,“无效地图元素”或类似此类的错误。
我遵循了HowToParseADocument指南,因此我认为它是正确的。但是,由于它不是100%可靠的,因此我正在寻找更稳定的东西。例如:
long size = 0;
unsigned char *yaml = FileUtils::getInstance()->getFileData("file.yml", "r", &size);
std::stringstream is;
is << yaml;
YAML::Parser parser(is);
YAML::Node doc;
while(parser.GetNextDocument(doc)) {
instance->settings = doc.Clone();
}
解析器通常在parser.GetNextDocument(doc)
调用时中断。我尝试阅读的文档是纯YAML,其中包含key: value
以下简单形式的列表:
# Comment
section1:
param1: value1
param2: value2
# Comment
section2:
param1: value1
param2: value2
我不允许透露原始YAML文件的内容,但是我可以为您提供一些信息:
value
是整数,浮点数或字符串我以前阅读过的代码,张贴在那儿,它始终是这种形式,并且我不会对其进行修改以使应用程序正确运行。只是该应用程序可以启动并且可以运行,或者可以启动并且不能运行。由于我在中间什么都没做,所以我真的不明白发生了什么。
很难猜出解决方案,因为您没有提供实际的示例,但是:
谁拥有unsigned char*
返回者的数据getFileData
?如果该函数本身拥有数据,则在该函数返回后它将不再有效,因此可能会发生各种疯狂的事情。
为了验证这里发生的事情(除了查看的实现以外getFileData
),您可以is.string()
在调用之前打印出YAML::Parser parser(is);
并查看是否可以打印出预期的YAML。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句