Swift + Locksmith:不存储价值

Jam*_*esG 5 keychain swift

我试图在游戏结束时存储一个值.

我使用的是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)")
}
Run Code Online (Sandbox Code Playgroud)

此行打印("Ended(EndDateAndTimeString)")输出:

结束时间19:33:38 + 2016-08-05

此行打印("无法设置时间")不执行任何操作

此行打印("此行运行")输出:

这条线跑了

这一行:print("存储为END :( timeBattleEnded)")不执行任何操作.

当我设置一个断点,然后在控制台中键入po字典时,它会向我显示已设置的其他内容但不是此值.

谁能明白为什么?

编辑:

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

有任何想法吗?

Mar*_*rkP 3

用马修·帕尔默的话来说:

一个帐户下只存储一份数据,因此当您调用 updateData 时,它将覆盖该帐户当前存储的所有数据

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

尝试这个:

try Locksmith.updateData(["BattleEnd": "12345678", "Key2": "Value Two"], forUserAccount: "gameKeyChainValues")
Run Code Online (Sandbox Code Playgroud)