我正在尝试使用 UserDefaults 来持久保存布尔值。这是我的代码:
public static var isOffline = UserDefaults.standard.bool(forKey: "isOffline") {
didSet {
print("Saving isOffline flag which is now \(isOffline)")
UserDefaults.standard.set(isOffline, forKey: "isOffline")
UserDefaults.standard.synchronize()
}
}
为什么不起作用?这段代码有什么问题?
问题是当我尝试检索时"isOffline"
钥匙来自UserDefaults
我总是得到一个false
.
我在行的 .onChange 方法中设置了 isOffline (我使用 Eureka 作为创建表单的框架)。该标志在应用程序的生命周期中保留正确的值,但是当我关闭它时,该值可能会以某种方式被删除。
我遇到了同样的问题,问题出在“didSet”块本身。我不知道为什么,但它不适用于 userDefaults - 它不能正确保留它,并且在终止应用程序后所有更改都消失了。
Synchronize() 没有帮助。我发现,这个方法不再需要,并且将来会被弃用(这是 UserDefaults 类中的注释):
-synchronize 已弃用,并将在未来版本中标记为 NS_DEPRECATED 宏。
通过反复试验,我发现,如果我从主线程调用它,它是有效的:
public static var isOffline = UserDefaults.standard.bool(forKey: "isOffline") {
didSet {
print("Saving isOffline flag which is now \(isOffline)")
DispatchQueue.main.async {
UserDefaults.standard.set(isOffline, forKey: "isOffline")
}
}
}
如果有人能解释为什么它在主线程上工作而不是在其他线程上工作,我会很高兴听到它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)