【发布时间】:2022-06-10 18:05:45
【问题描述】:
我的用户默认设置在我的应用程序启动时没有持续存在的问题。我已经阅读了有关此问题的其他帖子,并且大多数都在各种提示后标记为已解决。我已经实施了所有建议的技巧(我知道),但我仍然遇到这个问题。
我创建了最简单的示例应用程序。该应用程序有一个按钮,可以根据名为“isLoggedIn”的 UserDefault 设置的当前状态在登录/注销之间切换。
这是代码...
import UIKit
class LoginViewController: UIViewController {
@IBOutlet weak var loginButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
refreshButton()
}
@IBAction func loginButtonPressed(_ sender: UIButton) {
let isLoggedIn = UserDefaults.standard.bool(forKey: "isLoggedIn")
UserDefaults.standard.set(!isLoggedIn, forKey: "isLoggedIn")
refreshButton()
}
func refreshButton() {
let isLoggedIn = UserDefaults.standard.bool(forKey: "isLoggedIn")
loginButton.setTitle(isLoggedIn ? "Logout" : "Login", for: .normal)
}
}
单击按钮时,会更新 UserDefault 设置并刷新按钮以根据新设置显示登录或注销。如果我在模拟器中运行应用程序,我可以看到按钮切换,它告诉我 UserDefault 设置已正确存储。
当我重新启动应用程序时出现问题。当应用程序关闭时,该按钮会刷新以显示 UserDefault 设置的最后状态。但它并不总是正确地反映以前的状态。偶尔会,但我更多时候不会。我在这里也看不到任何模式。
我试过了……
- 使用
set方法代替setValue方法 - 应用更新后调用
synchronize方法(我知道 Apple 表示不再需要或建议这样做)
我只是无法确定我忽略了什么。有人对我做错了什么有任何想法吗?如果我可以提供任何可能有帮助的其他代码,请告诉我。
谢谢, 乔尔
更新
我决定跟踪 plist 文件本身中设置的实际更改。经过检查,我注意到该设置需要几秒钟才能在文件中进行物理更新。因此,如果我在关闭我的应用程序之前等待几秒钟,那么设置将保存并且当我再次启动时它会正确显示。所以新的问题是......
- 为什么我的设置需要这么长时间才能保存?
- 在正确保存设置之前,我能否确保应用不会关闭?
这很有趣,因为我认为这是 Apple 说不再使用的 synchronize 方法的目的。
再次感谢!
【问题讨论】:
标签: ios swift nsuserdefaults userdefaults