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")
我正在尝试在游戏结束时存储一个值。
我正在使用 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")