2017-08-21 83 views
0

我想在UserDefaults中保存一些值。而我使用這段代碼保存缺少用戶默認值

func SaveSettings(){ 
    let def = UserDefaults.standard 
    def.set("test", forKey: "Value1") 
    def.set(myString, forKey: "Value2") //value: test1 
    def.set(myInt, forKey: "Value3") //value: 25 
    def.set(myInt64, forKey: "Value4") //value: 103254 
    def.synchronize() //I've tried to remove this line 
} 

節省我用這個代碼來控制,如果我的值保存在UserDefaults或不

for (key, value) in UserDefaults.standard.dictionaryRepresentation() { 
     print("\(key) = \(value) \n") 
} 

而看到這樣的結果

{ 
    Value1 = test 
    Value2 = test1 
    Value3 = 25 
    Value4 = 103254 
} 

後直到現在還沒有任何問題。但我重啓後的應用程序,並期待在值UserDefaults我看到這個結果

{ 
    Value1 = test 
    Value2 = 
} 

正如你看到的Value3廣告Value4丟失。但是Value2Value1停留。但Value2的值缺失

+0

'let def = UserDefaults.standart'不能編譯,這意味着這不能成爲你真正的代碼。 –

+0

對不起。這將是'標準的' –

+0

你有沒有在代碼中的任何地方調用'.removeObject(forKey:)'? – nayem

回答

0

我發現了這個問題。當myIntmyInt64和的值是nilmyString的值是空

SaveSettings() FUNC已經調用。不知何故,Value3Value4在這裏被刪除。我猜這是因爲它們的價值是nil。但我不確定這是什麼原因。

+0

是的。這是原因。在UserDefaults中設置任意鍵的值都會刪除相應的數據。在UserDefaults中存儲任何'Optional'類型也是一個不好的習慣。在將它們保存到'UserDefaults'之前解包你的'Optional'。 – nayem

0

運行應用程序時,您在Value1中設置的字符串值將被保存,但字符串對象在應用程序最初運行時不會獲取任何值。所以你需要檢查myInt,myString,myInt64在保存到UserDefaults.standard之前沒有變零。