2016-11-02 2 views
0

입력 한 사용자 이름과 암호가 올바른지 확인한 후 홈 화면으로 segue를 수행하려고하고 있으며 올바르지 않은 경우 경고 메시지를 표시하려고합니다. 나는 그 중 하나를 수행하는 데 성공하지 못했습니다. 로그인 버튼을 클릭하자마자 흰색 화면이 표시됩니다. 다음은 내 코드입니다 : 다음과 같은 방법으로 SEGUE을 수행Swift3 및 Xcode8 : 함수 실행 후 segue를 수행 할 수 없습니다.

:

@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'을 호출합니다. 이것은 당신이 이미 segue 중간에 있으므로 다른 segue를 수행하거나 경고를 표시 할 수 없습니다. 'shouldPerformSegue'에서 비동기 연산을 수행해야합니다. 버튼 탭이나 그와 비슷한 것에 대한 응답으로 로그인을 확인하고 그 결과를 사용하여 segue를 트리거하십시오. – 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

코드 SEGUE을 프리폼 : 나는 아래의 경고를 받고 있습니다

performSegue(withIdentifier: "loginSuccess", sender: nil)