Back at it again with a noob question.
For some reason I get the following error:
2017-07-25 14:29:00.589401+0200 Yiives[1416:534883] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key UserEmailAdresLogin.'
Now I am way to green to see the problem on my own, so please enlighten me.
It will not let me load the Login View. So how can I make it happen :D
I run the following code:
import UIKit
class LoginViewController: UIViewController {
@IBOutlet weak var BackgroundButton: UIButton!
@IBOutlet weak var UserEmailAdresInput: UITextField!
@IBOutlet weak var UserPasswordInput: UITextField!
@IBOutlet weak var UserLogin: UIButton!
@IBOutlet weak var UserForgotPassword: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func CloseLogin(_ sender: Any) {
dismiss(animated: true, completion: nil )
}
@IBAction func Login(_ sender: Any) {
let UserEmail = UserEmailAdresInput.text
let UserPassword = UserPasswordInput.text
let UserEmailStored = UserDefaults.standard.string(forKey: "UserEmail");
let UserPasswordStored = UserDefaults.standard.string(forKey: "UserPassword");
if(UserEmailStored == UserEmail){
if(UserPasswordStored == UserPassword){
//Login is succesfull
UserDefaults.standard.set(true, forKey: "UserLoggedIn")
UserDefaults.standard.synchronize();
}
}
}
}
If you need the source where the data is bein inserted:
import UIKit
class EntryViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var UserEmailAdresInput: UITextField!
@IBOutlet weak var UserPasswordInput: UITextField!
@IBOutlet weak var UserPasswordInputRepeated: UITextField!
@IBOutlet weak var UserSignUp: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.UserEmailAdresInput.delegate = self
self.UserPasswordInput.delegate = self
self.UserPasswordInputRepeated.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//Hide Keyboard upon Touch
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
self.view.endEditing(true)
}
//Hide Keyboard upon Return Key
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == UserEmailAdresInput{
UserEmailAdresInput.resignFirstResponder()
} else if textField == UserPasswordInput{
UserPasswordInput.resignFirstResponder()
} else {
UserPasswordInputRepeated.resignFirstResponder()
}
return true
}
@IBAction func SignUp(_ sender: Any) {
let UserEmail = UserEmailAdresInput.text;
let UserPassword = UserPasswordInput.text;
let UserPasswordRepeated = UserPasswordInputRepeated.text;
//Check if fields are filled in correctly
if(UserEmail?.isEmpty == true || UserPassword?.isEmpty == true || UserPasswordRepeated?.isEmpty == true){
displayAlertMessage(userMessage: "Alle velden moeten ingevuld worden");
return;
}
if UserEmail?.range(of: "@") == nil{
displayAlertMessage(userMessage: "Vul een legitiem emailadres in");
return;
}
if (UserPassword?.characters.count)! < 5{
displayAlertMessage(userMessage: "Wachtwoord moet langer zijn dan 5 karakters");
}
if(UserPassword != UserPasswordRepeated){
displayAlertMessage(userMessage: "Wachtwoorden zijn niet gelijk");
return;
}
//Store Data
UserDefaults.standard.set(UserEmail, forKey: "UserEmail");
UserDefaults.standard.set(UserPassword, forKey: "UserPassword");
UserDefaults.standard.synchronize();
//SignUp Succesfull
var Alert = UIAlertController(title:"Succesvol aangemeld!", message: "Ga naar je email inbox om je aanmelding te voltooien", preferredStyle: UIAlertControllerStyle.alert);
let OkAction = UIAlertAction(title:"Ok", style: UIAlertActionStyle.default, handler: nil);
Alert.addAction(OkAction);
self.present(Alert, animated: true, completion: nil)
}
func displayAlertMessage(userMessage:String){
var Alert = UIAlertController(title:"Melding", message: userMessage, preferredStyle: UIAlertControllerStyle.alert);
let OkAction = UIAlertAction(title:"Ok", style: UIAlertActionStyle.default, handler: nil);
Alert.addAction(OkAction);
self.present(Alert, animated: true, completion: nil)
}
}
This error means you have a link (I think in your storyboard file) to a variable called UserEmailAdresLogin
but this variable no longer exists in your code source.
To check it, right click on your controller in your storyboard, it will display the list of links, and just delete by clicking on the cross.
If the probleme is not in a storyboard, it's a typo in a variable name (by the way it should be written : "Address").