我试图在游戏结束时存储一个值。
我正在使用https://github.com/matthewpalmer/Locksmith updateData方法。
它在Github Repo上说
除了替换现有数据之外,如果已经存在,则将数据写入钥匙串
尝试Locksmith.updateData([“some key”:“另一个值”],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)")
}
此行打印(“Ended(EndDateAndTimeString)”)输出:
结束时间19:33:38 + 2016-08-05
此行打印(“无法设置时间”)不执行任何操作
此行打印(“此行运行”)输出:
这条线跑了
这一行:print(“存储为END :( timeBattleEnded)”)不执行任何操作。
当我设置一个断点,然后在控制台中键入po字典时,它会向我显示已设置的其他内容但不是此值。
谁能明白为什么?
编辑:
所以,检查完控制台后。它确实出现在我将信息保存到钥匙串后它就在那里。然后我切换视图并更新钥匙串中的另一个项目。这似乎删除了原来的一个,只保留新项目。两者都有不同的名称。
有任何想法吗?
用matthew palmer的确切字眼说:
帐户下只存储一个数据,因此当您调用updateData时,它将覆盖当前为该帐户存储的内容
所以,每当你调用Locksmith.updateData时,它基本上清除那里的所有数据,然后添加新值。您需要将密钥和值一起发送。
试试这个:
try Locksmith.updateData(["BattleEnd": "12345678", "Key2": "Value Two"], forUserAccount: "gameKeyChainValues")
您在第一行中获取的字典不是持续更新的钥匙串视图,它只是您调用该方法时钥匙串中的内容的副本。更新钥匙串时不会更新。如果您在更新后需要更新钥匙串中的最新值,请在更新后再次调用loadDataForUserAccount()
。