我正在尝试使用流行的Locksmith库来更新钥匙串中的游戏得分。
在我的初始ViewController viewDidLoad()
中,我使用以下代码将值初始设置为:0
do {
try Locksmith.saveData(data:["score" : 0], forUserAccount: "some_unique_game_name")
} catch {
print("Error")
}
在第二个ViewController中,我像这样初始化了顶部的钥匙串项:
let keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")
然后在一个检索分数的函数中,我有以下代码:
NSLog("Score is: \(self.keychain_data!["score"])").
这将在控制台中返回:
分数是:0
现在,我还有另一个功能可以像这样设置游戏得分:
func updateScor(to: score) {
NSlog("score is: \(score)")
do {
try Locksmith.updateData(data:["score" : score], forUserAccount: "some_unique_game_name")
} catch {
print("Error")
}
NSlog("saved score is: \(score)")
}
哪个在日志中给了我
得分是:9999
保存的分数是:9999
现在,当我再次玩游戏时,得分值仍设置为:
分数是:0
(这无需返回将其设置为0的初始视图控制器)。
应为:9999
有什么想法吗?
答案 0 :(得分:1)
似乎您正在尝试从旧值开始打印。
一旦更新了数据,就应该从keyChains中获取数据,以从那里获取最新副本。
您的代码应采用以下方式
1)在viewDidLoad()
2)获取kechain_data并打印,您将看到0
var keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")
NSLog("Score is: \(self.keychain_data!["score"])")
3)用updateScor(to: 9999)
4)再次获取keychain_data,然后尝试使用NSLog
keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")
NSLog("Score is: \(self.keychain_data!["score"])")
希望有帮助!