尽管同步,Userdefaults值仍然不会持续存在?

时间:2017-05-08 06:12:22

标签: swift nsuserdefaults

我正在利用UserDefaults来保存偶尔需要写入的小值。我相信我已经正确设置了它,但我不确定为什么它在我退出模拟器并重新启动它之后无法正常工作。 设置:

let defaults = UserDefaults.standard

然后按如下方式编写/修改:

defaults.set(true, forKey: "defaultsChecker")
defaults.synchronize()

使用print语句我可以看到该值确实从nil更新为true。但是,在开始再次打开模拟器(退出后)时检查viewDidLoad中的值,如下所示:

print("The value is is \((defaults.value(forKey: "defaultsChecker") as! Bool)))")

这始终在开始时返回nil,这意味着它不能通过关闭和重新打开模拟器来保存/保持。不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

请勿使用value(forKey:)UserDefaults读取Bool值 你设置bool然后使用bool(forKey:)

let defaults = UserDefaults.standard
defaults.set(true, forKey: "defaultsChecker")
print("The value is is \(defaults.bool(forKey: "defaultsChecker"))")

此处显示了UserDefaults

中的多种类型的值

enter image description here

你想获得价值,然后试试这个

defaults.integer(forKey: )
defaults.string(forKey: )
defaults.double(forKey: )
defaults.array(forKey: )
defaults.dictionary(forKey: )
defaults.data(forKey: )
defaults.bool(forKey:)

并且无需使用synchronize()自动同步。

在你的问题中你试试这个......

if let defaultsChecker =  UserDefaults.standard.object(forKey: "defaultsChecker") as? Bool {
        if defaultsChecker {
            debugPrint(defaultsChecker)// value has True
        } else  {
            debugPrint(false)// value has False
        }
    }