ios平台 localStorage bug

cocos creator 2.0.10版本

在ios端 localStorageSetItem 这个接口偶发性报错【概率极高】,一旦报错后,所有本地数据无法成功写入,会持续报错。

错误信息为:Error in localStorage.setItem()

我检查了一下源码:日志是在localStorage.cpp下打印的

if( ok != SQLITE_OK && ok != SQLITE_DONE)
printf(“Error in localStorage.setItem()\n”);

我们把所有的key value 输出,在出错时,和出错前,也没有发现任何异常调用

@jare

跟踪堆栈,发现 sqlite的状态为 SQLITE_BUSY

再跟踪了一下,发现cc.game.restart(); 之后 localStorageFree 有bug,导致数据库没有被正确关闭

需要在 close 之前 加三句代码

sqlite3_finalize(_stmt_clear);
sqlite3_finalize(_stmt_key);
sqlite3_finalize(_stmt_count);

1赞

得再看下。

请问应该在项目中如何复现这个问题?有demo么?

复现也比较简单哈,

比如对一个按钮对key 进行持久化++操作

另外一个按钮执行 cc.game.restart(); ,重启几次后,会发现持久化开始失败

大佬后面有找到解决的办法不?
我现在用的3.4.0的版本,短时间内大量读写之后,也会偶发性地出现ios上数据写不进去,在安卓上是没有问题的。
看了源码,安卓是有特殊处理。
最初想升级到3.7.2之后,应该会没事吧,结果两个引擎的sqlite3版本一对比,是一样的。
太底层又不懂处理,最近玩家投诉得有点多,略崩溃。

image 上线后依然有bug,ios 3.8.1

单机游戏?