Swift + 锁匠:不存储价值

Swift + Locksmith: Not storing value

我正在尝试在游戏结束时存储一个值。

我正在使用 https://github.com/matthewpalmer/Locksmith updateData 方法。

它在 Github Repo

上说

as well as replacing existing data, this writes data to the keychain if it does not exist already

try Locksmith.updateData(["some key": "another value"], forUserAccount: "myUserAccount")

这是我的:

let dictionary = Locksmith.loadDataForUserAccount("gameKeyChainValues")
                            
print("Ended \(EndDateAndTimeString)")

do {
   try Locksmith.updateData(["BattleEnd": "12345678"], forUserAccount: "gameKeyChainValues")
                                
}
catch {
    print("Unable to set time")
}

print("This line ran")
                            
if let timeBattleEnded = dictionary!["BattleEnd"] as? String {
    print("Stored for END: \(timeBattleEnded)")
}

这一行 print("Ended (EndDateAndTimeString)") 输出:

Ended 19:33:38+2016-08-05

这一行 print("Unable to set time") 什么都不做

这一行 print("这一行 运行") 输出:

This line ran

这一行:print("Stored for END: (timeBattleEnded)") 什么都不做。

当我设置断点然后在控制台中键入 po dictionary 时,它会显示其他已设置的内容,但不是这个值。

谁能看出为什么?

编辑:

所以,在检查了控制台之后。看起来确实是在我将信息保存到钥匙串之后它就在那里。然后我切换视图并更新钥匙串中的另一个项目。这似乎删除了原来的项目,只保留了新项目。两者的名称不同。

有什么想法吗?

您在第一行中获取的字典不是不断更新的钥匙串视图,它只是您调用该方法时钥匙串中内容的副本。当您更新钥匙串时,它不会更新。如果您希望在更新后从钥匙串中获取最新值,请在更新后再次调用 loadDataForUserAccount()

用 matthew palmer 的原话来说:

Only one piece of data is stored under an account, so when you call updateData it will overwrite whatever's currently stored for that account

所以,每次调用 Locksmith.updateData 时,它基本上都会清除其中的所有数据,然后添加新值。您需要同时发送键和值。

试试这个:

try Locksmith.updateData(["BattleEnd": "12345678", "Key2": "Value Two"], forUserAccount: "gameKeyChainValues")