2017-08-21 84 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之前没有变零。