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

UserDefault与文件路径设置
本文探讨了Cocos2d-x中UserDefault类的工作原理及其与文件路径设置的关系。通过源代码调试发现,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。

转载于:https://www.cnblogs.com/jzssuanfa/p/7238361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值