使用 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的主要内容,如果未能解决你的问题,请参考以下文章

注销按钮操作不起作用

UserDefaults 自动登录问题

如何在 swift 中使用 UserDefaults 实现登录/注销导航?

Swift 3 - UserDefaults 无缘无故自动清除

swift中的自动登录功能

如何使用 UserDefaults 保存已登录状态?