码迷,mamicode.com
首页 > 其他好文 > 详细

【独立开发者er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml

时间:2015-07-13 20:42:47      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:fileutils   userdefaul   独立开发者er   路径   xml   

这篇博客是由于下述问题产生的 —(代码1):
std::string str = FileUtils::getInstance()->getWritablePath();
    CCLOG(str.c_str());

UserDefault::getInstance()->setStringForKey("keyqq11", "value11");

FileUtils::getInstance()->setWritablePath("D:/");

str = FileUtils::getInstance()->getWritablePath();
    CCLOG(str.c_str());

UserDefault::getInstance()->setStringForKey("keyqq12", "value22");
开始我以为UserDefault.xml会在两个地方生成,结果我错了。UserDefault.xml只存在在默认路径:C:/Users/G40-70/AppData/Local/CAnimal/。注:关于默认路径,我们可以使用上述提到的方法进行打印。
于是我进入了漫长的寻找答案 – 我的方法是源码调试。注:如果大家用的是CocosStudio工程的话,就需要切换至Cocos2dx工程,因为CocosStudio不提供FileUtils实现。
我们先看UserDefault::getInstance接口 —(代码2):
UserDefault* UserDefault::getInstance()
{
    if (!_userDefault)
    {
        initXMLFilePath();

        // only create xml file one time
        // the file exists after the program exit
        if ((!isXMLFileExist()) && (!createXMLFile()))
        {
            return nullptr;
        }

        _userDefault = new (std::nothrow) UserDefault();
    }

    return _userDefault;
}
深入看initXMLFilePath()接口 —(代码3):
void UserDefault::initXMLFilePath()
{
    if (! _isFilePathInitialized)
    {
        _filePath += FileUtils::getInstance()->getWritablePath() + XML_FILE_NAME;
        _isFilePathInitialized = true;
    }    
}
从上面两段代码可以知道,UserDefault在进行初始化的时候进行路径的设置,而且只有在第一次时才修改_filePath值。于是上述代码1问题迎刃而解:由于在代码1中我们一共调用两次下述代码:
UserDefault::getInstance()->setStringForKey(......);

而UserDefault.xml路径只有在第一次调用时才设置,所以在第二次调用时,虽然此时FileUtils._writablePath已经修改,但是并没有使得UserDefault.filePath修改,所以代码1中出现只有在一处生成UserDefault.xml。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【独立开发者er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml

标签:fileutils   userdefaul   独立开发者er   路径   xml   

原文地址:http://blog.csdn.net/chenqiai0/article/details/46866745

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!