2016-10-01 41 views
1

我使用Firebase身份驗證設置了登錄場景。在輸入正確的細節時,場景應該通過執行「loggedIn」segue進行更改。在輸入不正確的細節時,錯誤應該打印到控制檯並且什麼都不應該發生。iOS swift firebase auth不正確登錄

我發現,儘管發現錯誤(並將其打印到控制檯),控制器仍然執行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

編輯

Storyboard with navigation controller and segues removed

我在加入故事板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) 
    } 
} 
} 

現在我對成功輸入登錄信息

回答

1

如果你已經在你的故事板通過賽格瑞連接您的按鈕LoogedIn的viewController得到一個BAD_INSTRUCTION錯誤。它會延續UI。你可以做的是實例化你的viewController,然後來回延伸。

從故事板中刪除該segue。

let loggedInScene = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "loggedInViewVontrollerVC_ID") as! loggedInViewVontroller 

self.navigationController?.pushViewController(loggedInScene, animated: true) 

PS: - loggedInViewVontrollerVC_ID是你對的loggedIn的viewController

storyboardID選擇的viewController要Segue公司在故事板 - >身份監察長>故事板ID - >loggedInViewVontrollerVC_ID

並確保您已在第一個viewController中的導航控制器中嵌入。

+0

不幸的是,我不明白你的答案 - 沒有辦法做到這一點,而不刪除從故事板和使用我原來的方法segue?努力遵循哪個控制器引用登錄場景,並在您的答案中指向以下場景。 – benjanisa

+0

我添加了一個指向我的情節串連圖板的屏幕截圖的鏈接。故事板ID應該是導航控制器還是視圖控制器之後?另外,如何在第一個viewController中嵌入導航控制器?我只有通過故事板視圖才能完成此操作。你能否也請解釋爲什麼我目前的方法仍然因錯誤的登錄細節而停滯不前? – benjanisa

+0

請在上面的問題中查看我的更新(我已編輯)。試過按照你的指示 - 似乎做錯了什麼。 – benjanisa