之前用CocosCreator写了一个小游戏,因为微信小游戏需要软著,所以想先发布到AppStore上,没想到耗了一晚上踩了个坑,故记录一下。
错误日志(这是解决后复现的,错误原因不一致,但是根源是一样的
):
ERROR: TypeError: null is not an object (evaluating 'this.localLevelsconfig.length'), location: src/project.js:93:50
STACK:
dataHandle@src/project.js:93:50
setup@src/project.js:100:16
src/project.js:115:8
src/cocos2d-jsb.js:28061:7
src/cocos2d-jsb.js:27955:7
src/cocos2d-jsb.js:36758:2
fireTimeout@jsb-adapter/jsb-builtin.js:2191:24
tick@jsb-adapter/jsb-builtin.js:2148:14
项目使用本地存储通过信息,首次进入游戏需要判断本地存储是否有记录,然而let localData = cc.sys.localStorage.getItem(LocalKey);
获得的localData在CC编译器中为空即可,可构建成iOS项目时,则需要判断为null,所以导致首次处理本地存储的逻辑没有运行,并且后续读取本地储存并不是我预设的数据结构而导致的。
2020.12.19 更新
正确写法:
let bossRecordCheck = cc.sys.localStorage.getItem(FMLocalBossRecordKey);
if (localData === '' || localData === null || localData === "") {
//表示数据为空,也就是首次打开
}
另一种写法,还未测试:
let bossRecordCheck = cc.sys.localStorage.getItem(FMLocalBossRecordKey);
//如果为空,初始化
if (! bossRecordCheck) {
//表示数据不存在
}