zoukankan      html  css  js  c++  java
  • 【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.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/。

    注:关于默认路径,我们能够使用上述提到的方法进行打印。

    于是我进入了漫长的寻找答案 – 我的方法是源代码调试。

    注:假设大家用的是CocosStudioproject的话,就须要切换至Cocos2dxproject,因为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。

  • 相关阅读:
    校园网认证原理
    使VS Code自带的Markdown支持mathjax
    图像处理实用资源
    第一周的python作业
    Python中关于turtle库的笔记
    软件测试入门篇
    如何设计一条好的测试用例打卡第二天
    根据用户登录浅谈软件测试打卡第一天
    Andorid源码系列:View的onTouchEvent()与performClick(),performLongClick()调用时机解析
    论Activity及启动模式,Fragment,Service的使用以及生命周期
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7238361.html
Copyright © 2011-2022 走看看