@IBAction func loginEmailButton(sender: AnyObject) {
FIRAuth.auth()?.signInWithEmail(email.text!, password: password.text!, completion: { (user, error) in
if error != nil {
if let errCode = FIRAuthErrorCode(rawValue: error!.code) {
switch errCode {
case .ErrorCodeInvalidEmail:
self.emailLoginStatus = "invalid email"
case .ErrorCodeUserDisabled:
self.emailLoginStatus = "User account disabled"
case .ErrorCodeWrongPassword:
self.emailLoginStatus = "Wrong Password"
case .ErrorCodeUserNotFound:
self.emailLoginStatus = "User not found"
case .ErrorCodeNetworkError:
self.emailLoginStatus = "Could not connect"
default:
self.emailLoginStatus = "Login Error"
}
}
}else{
self.emailLoginStatus = "Logged"
}
})
if self.emailLoginStatus == "Logged"{
self.performSegueWithIdentifier("emailLoginToSearchSegue", sender: self)
}else{
showAlert(emailLoginStatus)
}
}
我确实一步步调试了代码,情况是这样的:当我点击loginEmailButton
第一次,邮箱和密码参数设置为signInWithEmail
函数,但该函数不执行(调试的下一步直接退出函数而不运行完成块)。
然后模拟器会显示没有文本的警报消息,但如果我关闭警报并点击loginEmailButton
再次,signInWithEmail
正确执行并显示带有正确消息的警报。我什至尝试更新 Firebase pod,但问题仍然存在。
有什么建议吗?谢谢!
它的异步问题。signInWithEmail
对服务器进行异步调用,这意味着此调用将加载到不同的网络线程中,这需要一些时间才能完成,但由于您的performSegueWithIdentifier
被放在completionBlock之外,所以它甚至在登录完成之前就被执行,但是当您下次按下按钮时,您的用户之前已经从您的第一次调用中登录了,所以它会继续...
只需将
self.performSegueWithIdentifier("emailLoginToSearchSegue", sender: self)
在 - 的里面signInWithEmail
完成块()。
@IBAction func loginEmailButton(sender: AnyObject) {
FIRAuth.auth()?.signInWithEmail(email.text!, password: password.text!, completion: { (user, error) in
if error != nil {
if let errCode = FIRAuthErrorCode(rawValue: error!.code) {
switch errCode {
case .ErrorCodeInvalidEmail:
self.emailLoginStatus = "invalid email"
case .ErrorCodeUserDisabled:
self.emailLoginStatus = "User account disabled"
case .ErrorCodeWrongPassword:
self.emailLoginStatus = "Wrong Password"
case .ErrorCodeUserNotFound:
self.emailLoginStatus = "User not found"
case .ErrorCodeNetworkError:
self.emailLoginStatus = "Could not connect"
default:
self.emailLoginStatus = "Login Error"
}
}
}else{
self.performSegueWithIdentifier("emailLoginToSearchSegue", sender: self)
}
})
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)