userDefault 值直到关闭应用程序才会更新

userDefault value is not updated until the closing the app

我有一个关于 userDefault 的问题,@Sh_Khan 帮助我解决了这个问题,但我还不能解决这个问题,所以我在这里询问更多细节。

我创建了一个 userDefault 来存储用户名

let user_name = UserDefaults.standard.string(forKey: "user_name")

我有一个登录页面,当用户点击登录按钮时,用户名保存在 UserDefaults

let username = usernameInput?.text?.replacingOccurrences(of: " ", with: "")

   @IBAction func pressLoginBtn(_ sender: UIButton) {
   UserDefaults.standard.setValue(username, forKey: "user_name")
...
}

保存并运行良好,然后在个人资料页面中,即 UIViewController,我有一个注销按钮将用户送回登录页面。

在这种情况下,我假设当用户添加新用户名时,旧值应立即替换为新值,但确实如此,但新值 UserDefaults 仍然显示旧值,直到我关闭应用程序并再次打开它,然后它显示新值

因此,我尝试在用户单击注销按钮时删除该值:

  @IBAction func pressLogutBtn(_ sender: UIBarButtonItem) {
        UserDefaults.standard.removeObject(forKey: "user_name")
        print(user_name)
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "login")
        self.present(mainStoryboard,animated:true,completion:nil)
    }

有趣的是,在第二行,我删除了值,但是在下一行打印时,它仍然存在。

为了测试,我在个人资料页面的 viewDidLoad 中添加了这张照片。

print(user_name)

然后,例如用户添加 mrX 用户名,因此当个人资料页面打开时,它会打印 mrX。然后我按注销并输入 mrY 用户名。然后当个人资料页面打开时,它仍然打印mrX,这个过程可以重复多次,它仍然打印mrX,直到我完全关闭应用程序,然后它打印mrY

有人可以帮忙吗?我真的不明白这里有什么问题。

您无法通过您使用的方式立即从 userDefaults 读取数据。

而不是这样:

print(user_name)

你应该使用:

print(UserDefaults.standard.string(forKey: "user_name")!)