gpt4 book ai didi

ios - UserDefaults 不使用 Swift 保存

转载 作者:IT王子 更新时间:2023-10-29 05:25:50 24 4
gpt4 key购买 nike

我正在尝试使用 UserDefaults 持久保存一个 bool 值。这是我的代码:

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()
}
}

为什么不起作用?这段代码有什么问题?

问题是,当我尝试从 UserDefaults 检索 "isOffline" 键时,我总是得到一个 false

我在该行的 .onChange 方法中设置了 isOffline(我使用 Eureka 作为框架来创建表单)。该标志在应用程序的生命周期内保留正确的值,但当我关闭它时,该值可能会以某种方式被删除。

最佳答案

我遇到了同样的问题,问题出在“didSet” block 本身。我不知道为什么,但它不适用于 userDefaults - 它不能正确保留它,并且在终止应用程序后所有更改都消失了。

Synchronize() 没有帮助。我发现,这个方法不再是必需的,将来会被弃用(这是 UserDefaults 类中的注释):

-synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release.

通过反复试验我发现,如果我从主线程调用它,它是有效的:

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")
}
}
}

如果有人能解释为什么它在主线程上工作而不在其他线程上工作,我会很高兴听到。

关于ios - UserDefaults 不使用 Swift 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com