I am doing login module, but in xcode it can read my user data but cannot login into profile activity, and it always show this line has Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0).
let user = jsonData.value(forKey: "user") as! NSDictionary
And also display error message which is
fatal error: unexpectedly found nil while unwrapping an Optional value(lldb)
this is my full code for my login.swift
import UIKit
import Alamofire
class LoginViewController: UIViewController {
@IBOutlet weak var labelMessage: UILabel!
@IBOutlet weak var textFieldUserName: UITextField!
@IBOutlet weak var textFieldPassword: UITextField!
let URL_USER_LOGIN = "http://192.168.8.115/select/v1/userLogin.php"
//the defaultvalues to store user data
let defaultValues = UserDefaults.standard
@IBAction func buttonLogin(_ sender: UIButton) {
let parameters: Parameters=[
"username":textFieldUserName.text!,
"password":textFieldPassword.text!
]
Alamofire.request(URL_USER_LOGIN, method: .post, parameters: parameters).responseJSON
{
response in
//printing response
print(response)
//getting the json value from the server
if let result = response.result.value {
let jsonData = result as! NSDictionary
//if there is no error
if(!(jsonData.value(forKey: "error") as! Bool)){
//getting the user from response
let user = jsonData.value(forKey: "user") as! NSDictionary
//getting user values
let userId = user.value(forKey: "user_id") as! Int
let userName = user.value(forKey: "username") as! String
let userEmail = user.value(forKey: "email") as! String
//saving user values to defaults
self.defaultValues.set(userId, forKey: "userid")
self.defaultValues.set(userName, forKey: "username")
self.defaultValues.set(userEmail, forKey: "useremail")
//switching the screen
let profileViewController = self.storyboard?.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
self.navigationController?.pushViewController(profileViewController, animated: true)
self.dismiss(animated: false, completion: nil)
}else{
//error message in case of invalid credential
self.labelMessage.text = "Invalid username or password"
}
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
//hiding the navigation button
let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton
// Do any additional setup after loading the view, typically from a nib.
//if user is already logged in switching to profile screen
if defaultValues.string(forKey: "username") != nil{
let profileViewController = self.storyboard?.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
self.navigationController?.pushViewController(profileViewController, animated: true)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Hope can see the feedback, thank you.