直接用UserDefault存储数据不在后面加flush方法时,安卓倒是没啥问题,真机带程序关机未测,但是IOS模拟器的话退出模拟器和XCODE直接stop会导致数据没有存储到UserDefault.xml里
后来在UserDefault存储数据代码后加flush方法,发现IOS模拟器怎样退都没问题了,安卓真机带程序关机也没丢失数据
但是flush方法是个空方法,百度了也发现有人说是空说此方法没用,但是我这里发现此方法有效
求解一下这到底是为何,一个空方法能让UserDefault马上就存储数据到文件里
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
void UserDefault::flush()
{
synchronize];
}
```
这个?
2L泥垢了
cocos2dx3.0带的CCUserDefault类里flush方法只有这个:
void UserDefault::flush()
{
}
也就是空的
版本问题么?但是版本问题的话为啥flush方法又有用
或者说是因为我用的vs所以神奇般的看不到ios的代码?
顺便synchronize貌似的确是oc里强制更新进userdefault.xml的写法
添加:
后发现CCUserDefault.cpp里有个if和endif包含了引入头文件后的所有代码
#if (CC_TARGET_PLATFORM != CC_PLATFORM_IOS && CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
#endif
大意应该是非IOS或者安卓平台
但是没有发现IOS和安卓平台的代码,总不能说代码也会根据平台而改变吧,还是说不同平台调用不同的UserDefault类(有多个UserDefault类)里的方法?
再添加:
1.意外发现类class CC_DLL UserDefault{}中CC_DLL宏跳转过去会判断平台,并且不同平台貌似还有不同的写此宏的类
2.xcode里cmd+鼠标左键CCUserDefault.cpp里的flush()方法,其中有一个跳转过去会发现一个CCUserDefault.mm里写着判断是ios平台然后flush方法里也有代码,就是2L说的那段
3.发现CCUserDefaultAndroid.cpp,虽然CCUserDefaultAndroid.cpp里flush还是空方法
总结一下:
虽然不是很清楚总流程,但是能发现不同平台有不用应对方法,总之就是不同平台的对应方法已经写好了的意思,不报错的话只管用就是了
楼主,你到你项目中 cocos2d\cocos\base 路径下看看,就知道答案了。
因为你会发现那里有:CCUserDefault.h,CCUserDefault.cpp,CCUserDefaultAndroid.cpp,CCUserDefault.mm。
也就是说后三个文件公用一个.h文件。那么你分别进到后三个文件查看就会发现:
CCUserDefault.cpp是除IOS,MAC,Android之外的其他平台调用文件,这里的flush()函数是空的。
CCUserDefaultAndroid.cpp是Android平台调用文件,同样,这里的flush()函数也是空的。
CCUserDefault.mm文件是IOS和MAC平台调用文件,注意,这里的flush()函数是有内容的: synchronize];
那么可想而知,最起码Android和苹果这两个平台的数据存储方式也是不同的。
不知道这是不是cocos2dx开发人员故意挖下的坑!

