I want to show the saved username and password back on textfield when retrieve button is pressed

I made a save button that adds the username text to userdefaults and password text to KeyChainSwift. I also made a button retrieve which gets the data and adds it to textfield. But it is not working. I printed and it's giving me the output required. Do I have to make changes in viewdidload function in order to show on textfields back?

import UIKit
import KeychainSwift

class ViewController: UIViewController {

@IBOutlet var lblUsername: UITextField!
@IBOutlet var lblPassword: UITextField!

let keychain = KeychainSwift()
let defaults = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func didTap() {
    
    let username = lblUsername.text!
    let password = lblPassword.text!

    defaults.setValue(username, forKey: "user")

    keychain.set(password, forKey: "pass")
    
    lblUsername.text! = ""
    lblPassword.text! = ""
    
}

@IBAction func didRetrieveData(){
    let userString = UserDefaults.standard.string(forKey: "user")!
    self.lblUsername.text! = userString
    
    let userPassword = keychain.get("pass")!
    self.lblPassword.text! = userPassword
}

}

Upvotes: 0

Views: 333

Answers (1)

Vishnu Prasannan
Vishnu Prasannan

Reputation: 57

The code seems to be working fine and I can retieve the data any ways I will post the code which was working for me below.

import UIKit
import KeychainSwift

class ViewController: UIViewController {

    @IBOutlet var lblUsername: UITextField!
    @IBOutlet var lblPassword: UITextField!

    let keychain = KeychainSwift()
    let defaults = UserDefaults.standard
    var isSaved = false

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func didTap(sender: UIButton) {
        
        let username = lblUsername.text!
        let password = lblPassword.text!
        
        if(username != "" && password != "") {
            defaults.setValue(username, forKey: "user")
            keychain.set(password, forKey: "pass")
            lblUsername.text! = ""
            lblPassword.text! = ""
            isSaved = true
        } else {
            self.okAlert(title: "Error", message: "Please fill all fields")
        }
        
    }

    @IBAction func didRetrieveData(sender: UIButton){
        if(isSaved == true) {
            let userString = UserDefaults.standard.string(forKey: "user")!
            self.lblUsername.text! = userString
            
            let userPassword = keychain.get("pass")!
            self.lblPassword.text! = userPassword
        } else {
            self.okAlert(title: "Error", message: "No data to be retieved")
        }
    }
    

}
extension UIViewController {
    func okAlert(title: String, message: String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}

Upvotes: 0

Related Questions