尽管已同步,但 Userdefaults 值不会持续存在?
Userdefaults value not persisting despite being synchronized?
我正在使用 UserDefaults 保存一个偶尔需要写入的小值。我相信我已经正确设置了它,但我不确定为什么在我退出模拟器并重新启动它后它不工作。
设置:
let defaults = UserDefaults.standard
然后写成to/modified如下:
defaults.set(true, forKey: "defaultsChecker")
defaults.synchronize()
使用 print 语句我可以看到该值确实从 nil 更新为 true。但是,在再次打开模拟器(退出后)开始时检查 viewDidLoad
中的值,如下所示:
print("The value is is \((defaults.value(forKey: "defaultsChecker") as! Bool)))")
一开始总是returns nil,这意味着在关闭和重新打开模拟器时它一定不会saved/persist。不知道为什么会这样。
不要使用 value(forKey:)
从 UserDefaults
读取布尔值
当你设置 bool 然后使用 bool(forKey:)
let defaults = UserDefaults.standard
defaults.set(true, forKey: "defaultsChecker")
print("The value is is \(defaults.bool(forKey: "defaultsChecker"))")
此处显示了 UserDefaults
中多种类型的值
你想获取值,那么试试这个
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
}
}
我正在使用 UserDefaults 保存一个偶尔需要写入的小值。我相信我已经正确设置了它,但我不确定为什么在我退出模拟器并重新启动它后它不工作。 设置:
let defaults = UserDefaults.standard
然后写成to/modified如下:
defaults.set(true, forKey: "defaultsChecker")
defaults.synchronize()
使用 print 语句我可以看到该值确实从 nil 更新为 true。但是,在再次打开模拟器(退出后)开始时检查 viewDidLoad
中的值,如下所示:
print("The value is is \((defaults.value(forKey: "defaultsChecker") as! Bool)))")
一开始总是returns nil,这意味着在关闭和重新打开模拟器时它一定不会saved/persist。不知道为什么会这样。
不要使用 value(forKey:)
从 UserDefaults
读取布尔值
当你设置 bool 然后使用 bool(forKey:)
let defaults = UserDefaults.standard
defaults.set(true, forKey: "defaultsChecker")
print("The value is is \(defaults.bool(forKey: "defaultsChecker"))")
此处显示了 UserDefaults
你想获取值,那么试试这个
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
}
}