之前用CocosCreator寫了一個(gè)小游戲,因?yàn)槲⑿判∮螒蛐枰浿韵胂劝l(fā)布到AppStore上,沒(méi)想到耗了一晚上踩了個(gè)坑,故記錄一下。
錯(cuò)誤日志(這是解決后復(fù)現(xiàn)的,錯(cuò)誤原因不一致,但是根源是一樣的):
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
項(xiàng)目使用本地存儲(chǔ)通過(guò)信息,首次進(jìn)入游戲需要判斷本地存儲(chǔ)是否有記錄,然而let localData = cc.sys.localStorage.getItem(LocalKey);獲得的localData在CC編譯器中為空即可,可構(gòu)建成iOS項(xiàng)目時(shí),則需要判斷為null,所以導(dǎo)致首次處理本地存儲(chǔ)的邏輯沒(méi)有運(yùn)行,并且后續(xù)讀取本地儲(chǔ)存并不是我預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)而導(dǎo)致的。
2020.12.19 更新
正確寫法:
let bossRecordCheck = cc.sys.localStorage.getItem(FMLocalBossRecordKey);
if (localData === '' || localData === null || localData === "") {
//表示數(shù)據(jù)為空,也就是首次打開
}
另一種寫法,還未測(cè)試:
let bossRecordCheck = cc.sys.localStorage.getItem(FMLocalBossRecordKey);
//如果為空,初始化
if (! bossRecordCheck) {
//表示數(shù)據(jù)不存在
}