2016-11-02 11 views
0

入力したユーザー名とパスワードが正しいかどうかを確認してからsegue to Home画面を実行しようとしていますが、正しくない場合は警告メッセージを表示しようとしています。私はそれらのいずれかを成功させていません。ログインボタンをクリックするとすぐに、白い画面が表示されます。以下 は私のコードです:Swift3とXcode8:機能の実行後にセグを実行できません

@IBAction func didClickLogin(_ sender: Any) { 
    self.progressIndicator.isHidden = false 
    self.progressIndicator.startAnimating() 
    let enteredUserName = mMobileNumber.text 
    let enteredPassword = mPassword.text 
    //performing validation for username and password 
    didUserLogin(username: enteredUserName!, password: enteredPassword!) 
    return true 
} 

マイdidLogin機能:以下の方法でセグエ実行

func didUserLogin(username: String, password: String) { 
    let requestString = Constants.BASE_URL+"/mlogin" 
    let parameters: Parameters = ["username":username, "password":password] 
    let headers = ["Authorization": "Basic \(Constants.base64LoginString)"] 

    Alamofire.request(requestString, method:.post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON { response in 
     //to get status code 
     switch response.result { 
     case .success(let data): 
      let json = JSON(data) 
      switch (json["status"].stringValue){ 
      case "200": 
       DispatchQueue.main.async { 
        self.performSegue(withIdentifier: "loginSuccess", sender: self) 
       } 
       break 

      case "401": 
       self.progressIndicator.isHidden = true 
       self.progressIndicator.stopAnimating() 
       let alert = Constants() 
       alert.showAlert(fromController: self, alertMessage: "Entered username or password is incorrect") 
       break 

      case .failure(let error): 
       print("Request failed with error: \(error)") 
      } 
     } 
    } 
} 

を私がやっている何を間違えお知らせください、私は何を教えてください変更を行う必要があります。私は警告メッセージを表示するためにベールではありません。私はあなただけの次のメソッドを実装する必要があると思うし、それが正常に動作する必要があり

Warning: Attempt to present <UIAlertController: on whose view is not in the window hierarchy! 
+0

あなたは 'shoulcPerformSegue'の中から' didUserLogin'を呼び出しています。これはあなたが既にセグの途中にあるので、別のセグを実行したりアラートを表示することはできません。また、shouldPerformSegueで非同期操作を実行する必要があります。ボタンタップなどに応答してログインを確認し、結果を使用してセグをトリガーしてください。 – Paulw11

+0

@ Paulw11ありがとうございます。ありがとうございます。 – focus

+0

@ Paulw11ログインボタンのIBActionを追加しました。 performSegueを呼び出すが、それでも起こっていない?? – focus

答えて

0

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "YOUR_SCENE_IDENTIFIER_TO_THE_NEXT_SCREEN") { 
    // pass some data to the destination vc, if you need 
    } 

}

+0

私はこれを試してもまだ動作していません – focus

0

コードがセグエをプリフォームする: 私は以下の警告を取得しています

performSegue(withIdentifier: "loginSuccess", sender: nil) 
関連する問題