Swift + Locksmith:不存储价值

问题描述 投票:5回答:2

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

我正在使用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字典时,它会向我显示已设置的其他内容但不是此值。

谁能明白为什么?

编辑:

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

有任何想法吗?

swift keychain
2个回答
3
投票

用matthew palmer的确切字眼说:

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

所以,每当你调用Locksmith.updateData时,它基本上清除那里的所有数据,然后添加新值。您需要将密钥和值一起发送。

试试这个:

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.