Swift:Locksmith不更新数据

时间:2018-09-20 12:49:30

标签: swift keychain

我正在尝试使用流行的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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

似乎您正在尝试从旧值开始打印。

一旦更新了数据,就应该从keyChains中获取数据,以从那里获取最新副本。

您的代码应采用以下方式

1)在viewDidLoad()

中将分数设置为0

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"])")

希望有帮助!