在关闭应用程序之前,不会更新userDefault值

时间:2019-10-19 20:37:52

标签: swift nsuserdefaults

我在使用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

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

1 个答案:

答案 0 :(得分:0)

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

代替这种方式:

print(user_name)

您应该使用:

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