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")!)
我有一个关于 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")!)