我在使用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
。
有人可以帮忙吗?我真的不明白这是什么问题。
答案 0 :(得分:0)
您无法使用自己的方式立即从userDefaults
读取数据。
代替这种方式:
print(user_name)
您应该使用:
print(UserDefaults.standard.string(forKey: "user_name")!)