입력 한 사용자 이름과 암호가 올바른지 확인한 후 홈 화면으로 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!
당신은'shoulcPerformSegue' 내부에서'didUserLogin'을 호출합니다. 이것은 당신이 이미 segue 중간에 있으므로 다른 segue를 수행하거나 경고를 표시 할 수 없습니다. 'shouldPerformSegue'에서 비동기 연산을 수행해야합니다. 버튼 탭이나 그와 비슷한 것에 대한 응답으로 로그인을 확인하고 그 결과를 사용하여 segue를 트리거하십시오. – Paulw11
@ Paulw11 좋습니다. 감사합니다. 많이 할 것이고 – focus
을 확인하십시오. Paulw11 로그인 버튼과 응답에 IBAction을 추가했습니다. performSegue를 호출하지만 여전히 발생하지 않는가 ?? – focus