使用 UserDefaults() 自动登录不起作用 Swift 5
Posted
技术标签:
【中文标题】使用 UserDefaults() 自动登录不起作用 Swift 5【英文标题】:Auto login using UserDefaults() not working Swift 5 【发布时间】:2020-07-07 19:45:37 【问题描述】:我遵循了一些教程并使用他们的方法为我的应用程序实现了自动登录,但是一旦我在输入凭据后重新启动应用程序,应用程序就无法登录。
var userDefaults = UserDefaults.standard
这里我启动了用户默认功能
let session = URLSession.shared
session.dataTask(with: request) (data, response, error) in
if let safeData = data
if let dataString = String(data: safeData, encoding: String.Encoding.utf8)
print(dataString)
if dataString == "Hello"
self.userDefaults.setValue(true, forKey: "UserIsLoggedIn")
DispatchQueue.main.async
self.performSegue(withIdentifier: "loginSegue", sender: self)
else
DispatchQueue.main.async
self.validationLabel.isHidden = false
self.validationLabel.text = " Username or password is incorrect. "
self.loginSuccessful = false
else
print(error ?? "Error with data API URLSession")
.resume()
在这里,在 API 调用中。如果来自 API 的响应是“hello”,这意味着登录成功,我使用标识符将值设置为 true。
if userDefaults.value(forKey: "UserIsLoggedIn") as? Bool == true
performSegue(withIdentifier: "loginSegue", sender: self)
else
在视图中确实加载了我使用 userDefaults 执行到下一个屏幕以供将来启动.. 但它不起作用。
initiation
viewdidload
API call
【问题讨论】:
【参考方案1】:var userDefaults = UserDefaults()
似乎是错误的。请改用let userDefaults = UserDefaults.standard
。此外,无需将此作为您的类的属性,只需在您的方法中根据需要使用它即可。
【讨论】:
谢谢你的attmept,我也试过了。我也尝试过使用UserDefaults.standard.set(true, forKey: "UserIsLoggedIn")
和if UserDefaults.standard.bool(forKey: "UserIsLoggedIn") == true performSegue(withIdentifier: "loginSegue", sender: self) else
,但并没有什么不同。我开始认为它甚至没有注册用户默认值,因为我可能将它设置在 API 调用的闭包中?
不,这没有什么区别。我建议您设置断点以确保对 UserDefaults 的读/写操作实际上是按预期的方式执行的。【参考方案2】:
您是否检查过该值是否保存在您的用户默认文件中?如果您在模拟器上运行您的应用程序,请尝试将文件路径打印到您的用户默认文件并尝试找到它。它可能无法解决您当前的问题,但它有望让您了解问题的根源。
尝试使用 AppDelegate.swift 中的以下行打印用户默认文件的位置
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String)
【讨论】:
您好,谢谢您的提示!它给了我一条通往一堆文件夹的路径,但不幸的是,我不知道我应该寻找什么。以上是关于使用 UserDefaults() 自动登录不起作用 Swift 5的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中使用 UserDefaults 实现登录/注销导航?