Reputation: 1
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
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