現在名前をテキストフィールドUSERNAMEを入力するとDBからその名前に関するデータをjsonとして取得。画面に名前を表示するアプリを作成しているのですが、fatal error: unexpectedly found nil while unwrapping an Optional valueと出てしまいます。
コードをなんども読み返して手を加えたりしているのですが解決しません。
オプショナル型などミスはしていないと思うのですが。どうか、ご教授お願いします
SearchViewController import UIKit import Alamofire class SearchViewController: UIViewController { //API let SEARCH_CODE = "API CODE" //devaultUserValue let defaultValues = UserDefaults.standard @IBOutlet weak var searchCodeFeild: UITextField! @IBOutlet weak var labelMessage: UILabel! @IBAction func searchBtn(_ sender: UIButton) { //Getting device code let parameters: Parameters=[ "username" : searchCodeFeild.text! ] //making post request Alamofire.request(SEARCH_CODE, 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)){ let device = jsonData.value(forKey: "user") as! NSDictionary //ここでエラー //getting user value let deviceID = device.value(forKey: "id") as! Int let deviceName = device.value(forKey: "name") as! String let deviceCode = device.value(forKey: "usernaem") as! String self.defaultValues.set(deviceID, forKey: "id") self.defaultValues.set(deviceName, forKey: "name") self.defaultValues.set(deviceCode, forKey: "username") let resultViewController = self.storyboard?.instantiateViewController(withIdentifier: "ResultViewController") as! ResultViewController self.navigationController?.pushViewController(resultViewController, animated: true) self.dismiss(animated: false, completion: nil) }else{ self.labelMessage.text = "Sorry not find device" } } } if (defaultValues.object(forKey: "name") != nil){ print("have an data") } }
ResultViewController class ResultViewController: UIViewController { @IBOutlet weak var deviceNameFeild: UILabel! @IBAction func backBtn(_ sender: UIButton) { //userDefaultにあるデーターを消す UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!) UserDefaults.standard.synchronize() let searchViewController = self.storyboard?.instantiateViewController(withIdentifier: "SearchViewController") as! SearchViewController self.navigationController?.pushViewController(searchViewController, animated: true) self.dismiss(animated: false, completion: nil) } override func viewDidLoad() { super.viewDidLoad() let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil) navigationItem.leftBarButtonItem = backBtn let defaultValues = UserDefaults.standard if let name = defaultValues.string(forKey: "name"){ //setting the name to label deviceNameFeild.text = name }else{ //send back to login view controller } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
不足部分などありましたら追加するのでよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー