Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift&x2B;锁匠:不储存价值_Swift_Keychain - Fatal编程技术网

Swift&x2B;锁匠:不储存价值

Swift&x2B;锁匠:不储存价值,swift,keychain,Swift,Keychain,我试图在游戏结束时存储一个值 我正在使用updateData方法 它在Github回购协议上写着 除了替换现有数据外,如果密钥链不存在,还会将数据写入密钥链 请尝试Locksmith.updateData([“某个键”:“另一个值”],forUserAccount:“myUserAccount”) 这就是我所拥有的: let dictionary = Locksmith.loadDataForUserAccount("gameKeyChainValues")

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

我正在使用updateData方法

它在Github回购协议上写着

除了替换现有数据外,如果密钥链不存在,还会将数据写入密钥链

请尝试Locksmith.updateData([“某个键”:“另一个值”],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)")
}
此行打印(“结束(EndDateAndTimeString)”)输出:

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

该行打印(“无法设置时间”)不起任何作用

此行打印(“此行已运行”)输出:

这条线跑了

这一行:打印(“存储用于结束:(timeBattleEnded)”)不起任何作用

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

有人知道为什么吗

编辑:

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


有什么想法吗?

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

,用matthew palmer的话说:

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

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

试试这个:

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

使用您所说的,我可以看到该项目,但只有在我切换视图并保存另一个项目之前。请参见编辑。