2016-08-05 61 views
4

我試圖在遊戲結束時存儲一個值。Swift + Locksmith:不存儲值

我正在使用https://github.com/matthewpalmer/LocksmithupdateData方法。

它說,在Github上回購

以及替換現有的數據,如果不存在

嘗試Locksmith.updateData([「一些關鍵的」 IT這將數據寫入到鑰匙串: 「另一個值」],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年8月5日

此行打印(「無法設置時間 「)什麼也不做

此行打印(」 這條線跑「)輸出:

這條線跑

這條線:打印( 「保存END:(timeBattleEnded)」)什麼都不做。

當我設置一箇中斷點,然後在控制檯中輸入po字典它會顯示其他設置,但不包含此值。

任何人都可以看到爲什麼?

編輯:

所以,檢查控制檯後。它似乎直接將信息保存到鑰匙串後出現。然後我切換視圖並更新鑰匙串中的另一個項目。這似乎刪除了原來的一個,只保留新的項目。兩者都有不同的名字。

任何想法?

回答

3

馬修·帕爾默的原話:

只有一個數據是一個賬戶下保存,所以當你調用UpdateData它將覆蓋任何真實當前存儲該帳戶

所以每次調用Locksmith.updateData時,它都會清除其中的所有數據,然後添加新值。您需要將密鑰和值一起發送。

試試這個:

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

Duh !!非常感謝!! – JamesG

1

您在第一行讀取的字典不是一個不斷更新的鑰匙串視圖,它只是您調用該方法時鑰匙串內容的副本。當您更新鑰匙串時,它不會被更新。如果您希望在更新Keychain後更新最新的值,請在更新後再次呼叫loadDataForUserAccount()

+0

使用你說我能看到的項目是什麼,但直到我交換意見,並保存的另一項。請參閱編輯。 – JamesG