【问题标题】:UserDefault values are missing缺少用户默认值
【发布时间】:2017-08-21 07:21:30
【问题描述】:

我想在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 =
}

如您所见,Value3ad Value4 不见了。但是Value2Value1 仍然存在。但是Value2 的值丢失了

【问题讨论】:

  • let def = UserDefaults.standart 无法编译,这意味着这不是您的真实代码。
  • 对不起。应该是standard
  • 您是否在代码中的任何位置调用过.removeObject(forKey:)
  • 没有。我没打过电话

标签: swift3 userdefaults


【解决方案1】:

我找到了问题。

myIntmyInt64 的值为nilmyString 的值为空时调用SaveSettings() 函数。不知何故,Value3Value4 在这里被删除了。我猜这是因为它们的价值是nil。但我不确定这是不是确切的原因。

【讨论】:

  • 是的。这就是原因。为UserDefaults 中的任何键设置值会删除相应的数据。在UserDefaults 中存储任何Optional 类型也是一种不好的做法。在将 Optional 保存到 UserDefaults 之前打开它们。
【解决方案2】:

当您运行您的应用程序时,您在 Value1 中设置的字符串值将被保存,但当应用程序最初运行时,字符串对象没有获得任何值。所以你需要检查myIntmyStringmyInt64在保存到UserDefaults.standard之前没有得到零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多