问题就是一般情况下是没有问题的,有很小的概率突然出现数据获取不到的情况
代码大概是这样的
function DataCtrl:init()
GameState.init(function(param)
local returnValue=nil
if param.errorCode then
print("###############" … param.errorCode)
if param.errorCode == GameState.ERROR_INVALID_FILE_CONTENTS then
print(“不合法的文件内容,即取出来的内容不是一个table”)
elseif param.errorCode == GameState.ERROR_HASH_MISS_MATCH then
print(“文件被人为更改过”)
elseif param.errorCode == GameState.ERROR_STATE_FILE_NOT_FOUND then
print(“文件不存在”)
else
print(“ERROR”)
end
else
print("@@@@@@@@ " … param.name)
if param.name == “init” then
if not io.exists(param.filename) then
_data = DATA_DEFAULT
self:saveData()
end
elseif param.name==“save” then
local str=json.encode(param.values)
str=crypto.encryptXXTEA(str, “123456”)
returnValue={data=str}
elseif param.name==“load” then
print("$$$$$$$$$$$$")
local str=crypto.decryptXXTEA(param.values.data, “123456”)
returnValue=json.decode(str)
print(type(returnValue))
end
end
return returnValue
end, “data.txt”,“12369”)
_data=GameState.load()
end
function DataCtrl:saveData()
GameState.save(_data)
end
这个DataCtrl:init()会在MyApp的ctor函数中调用
出现错误时按上面的print打出来的信息依次是:
@@@@@@@@ init
GameState.load() - get values from…
@@@@@@@@ load
$$$$$$$$$$$$
nil
由于print(type(returnValue))为nil 最护导致 _data为nil 所以数据加载没有成功
如果是有错误的话errorCode 是有值的就不会走到else语句下面 然而加载后发现returnValue
为nil
后来又出现过这种情况当param.name == "load"时 dump出param的值
param.values.data 是有加密后的值的
print crypto.decryptXXTEA 解密后的 str 值 为nil
现在在做的是一款单机游戏,数据都是用GameState保存在本地的,一旦丢失问题就大了!
找了好久也不知道是什么问题…
这要疯啊!