restart后无法获取localStorage的数据

daotest.zip (521.7 KB)
1.6beta6.2,通过cc.sys.localStorage.setItem存储数据,然后restart,cc.sys.localStorage.getItem获取数据为空。如果存储后立即取出打印,可以看到数据。关闭模拟器,重新启动,也可以看到数据。那么为什么restart后没有数据呢?之前的版本是好使的。这个是bug么?还是代码写的有问题呢?
在1.6的主贴上提了几个问题,都没有回复,不知道为什么?遇到问题只能单独发帖了。

回退到1.6beta1版本,直接崩溃了,没有报错信息

1.5.1-beta.4.2也崩溃

cc.game.restart()用setTimeout(()=>{cc.game.restart()}, 10);包裹起来试试

可以啦,谢谢:)
延迟执行10毫秒就可以了呢,localStorage的存储是异步的么?

存储到 localStorage 是异步的,可能是在重启过程中取消了存储的回调

我是热更新方式下载资源包后,保持当前的场景状态(一个字符串),那这种延迟10毫秒的方式可以保证每次重启前localStorage的异步存储已经完成了么?有没有可以在localStorage的方法写回调的方式?

目前没有,做一个延迟是没问题的,保存的过程很快,我有空也会研究下什么问题

我在项目中实际应用,把延迟提高到了10000,有时候可以拿到,大多数时候还是拿不到,返回null,是不是和延迟没有关系呢,我在restart之前获取了一次,可以拿到最新存储的数据,restart之后为什么就拿不到呢,等了10秒钟可以排除异步的问题了吧。关闭模拟器,重新启动就可以拿到存储的数据。

你试试看用 build 出来的项目测试下

1赞

binary方式,iOS,xcode模拟器,可以拿到数据,正常的流程,达到了预想效果。
真机和安卓的还没有测试。

嗯,simulator 中可能是有些不可控,具体原因我还没査

嗯,谢谢啦,我先这么用着,真机和安卓我测试后,再记录下。

这个一定有闪退BUG,我碰过到了,当时在start里写了cc.sys.localStorage.getItem,但当时没注意是不是在restart后调用的,反正当时闪退了,后来是改造了一下start用scheduleOnce包裹到下一帧去执行,暂时没有再闪退。

我也遇到这样的问题,安卓不会,ios上面就会,用上面的延迟调用还是一样不行

同样的问题,存完马上去取,还是取不到:

JS 3.10版本 浏览器上,这时候应该也不是浏览器清缓存的原因吧

现在creator模拟器上 调用完cc.game.restart之后
通过jsb.fileUtil.getWritablePath()得到路径是错的,只有通过creator启动模拟器有问题。
这个问题是毕现的 每个版本的creator都有问题