0

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.

lun L
  • 47
  • 8

0 Answers0