Swift:锁匠不更新数据

标签 swift keychain

我正在尝试使用流行的库更新钥匙串(keychain)中的游戏分数:Locksmith .

在我的 Initial ViewController viewDidLoad() 中,我使用这段代码将值初始设置为:0

do {
    try Locksmith.saveData(data:["score" : 0], forUserAccount: "some_unique_game_name")
} catch {
    print("Error")
}

在我的第二个 ViewController 中,我在顶部初始化了钥匙串(keychain)项目,如下所示:

let keychain_data = Locksmith.loadDataForUserAccount(userAccount: "some_unique_game_name")

然后在一个检索分数的函数中,我有这段代码:

NSLog("Score is: \(self.keychain_data!["score"])").

这在控制台中返回:

Score is: 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)")
 }

这在日志中给了我:

score is: 9999

saved score is: 9999

现在,当我再次玩游戏时,分数值仍然设置为:

Score is: 0

(这不会返回到将其设置为 0 的初始 View Controller )。

应该是:9999

有什么想法吗?

最佳答案

看来您正在尝试从旧值打印。

更新数据后,您应该从 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"])")

希望对您有所帮助!

关于Swift:锁匠不更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425565/

相关文章:

ios - Swift 单例或全局变量 - 或者其他什么?

swift - Swift 3 中不允许 Core Midi Read 回调

macos - 为什么 git 有时会在 git-credential-osxkeychain 上卡住?

ios - didReceiveRemoteNotification 中的异步下载

ios - 如何从另一个 Controller 启用滚动?

iOS:新设备或恢复设备上的钥匙串(keychain)

macos - 如何存储多个 Github 帐户的钥匙串(keychain)凭据?

linux - 如何在终端钥匙串(keychain)中的 Linux 上存储你的 github https 密码?

iOS10 上的 KeychainItemWrapper 崩溃

ios - 如何根据是否存在另一个 UI 元素从左到右显示标签中的文本