我使用Firebase Auth设置了一个登录场景。在输入正确的细节时,场景应该通过执行“loggedIn”segue来改变。输入错误的详细信息时,错误应该打印到控制台,不会发生任何事情。
我发现尽管拿起错误(并将其打印到控制台),控制器仍然执行segue并移动到下一个屏幕(但是它不会向控制台打印“LOGGING IN”)。发现这种行为很奇怪,有什么想法吗?
我在下面的视图控制器中复制了我的日志:
import Foundation
import Firebase
import FBSDKCoreKit
import FBSDKLoginKit
class LogInViewController: UIViewController{
@IBOutlet weak var Email: UITextField!
@IBOutlet weak var Password: UITextField!
@IBAction func Login(_ sender: AnyObject) {
let email = self.Email.text!
let password = self.Password.text!
if (email != "" && password != ""){
FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in
if(error==nil){
print("LOGGING IN")
self.performSegue(withIdentifier: "loggedIn", sender: nil)
}
else{
print("COULDNT LOG IN")
print(error)
}
})
}
else{
let alert = UIAlertController(title: "Error", message: "Enter email and password", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(action)
self.present(alert, animated: true, completion: nil)
}
}
}
修改
我已将Storyboard ID loggedInViewControllerVC_ID添加到身份检查器中的mealViewController。
这是我的新代码:
import Firebase
import FBSDKCoreKit
import FBSDKLoginKit
class LogInViewController: UIViewController{
@IBOutlet weak var Email: UITextField!
@IBOutlet weak var Password: UITextField!
@IBAction func Login(_ sender: AnyObject) {
let email = self.Email.text!
let password = self.Password.text!
if (email != "" && password != ""){
FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in
if(error==nil){
print("LOGGING IN")
let nextViewController = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "loggedInViewControllerVC_ID") as! MealViewController
self.navigationController?.pushViewController(nextViewController, animated: true)
//self.performSegue(withIdentifier: "loggedIn", sender: nil)
}
else{
print("COULDNT LOG IN")
print(error)
}
})
}
else{
let alert = UIAlertController(title: "Error", message: "Enter email and password", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(action)
self.present(alert, animated: true, completion: nil)
}
}
}
我现在在成功输入登录详细信息时收到BAD_INSTRUCTION错误
答案 0 :(得分:1)
如果您已将故事板中的按钮通过segue连接到 LoogedIn
viewController。它会使UI变为现实。你可以做的是实例化你的viewController,然后来回传递。
从故事板中删除该segue。
let loggedInScene = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "loggedInViewVontrollerVC_ID") as! loggedInViewVontroller
self.navigationController?.pushViewController(loggedInScene, animated: true)
PS : - loggedInViewVontrollerVC_ID
是您登录的viewController的storyboardID
在故事板中选择要转换的viewController - > Identity Inspector-> StoryBoard ID - > loggedInViewVontrollerVC_ID 。
确保您已在第一个viewController中嵌入导航控制器。