簡體   English   中英

Swift 如何根據登錄的 Firebase 用戶帳戶來停止調用視圖

[英]Swift How to stop views from being called based on which Firebase user account is signed in

在我的應用程序中,我有三種不同類型的帳戶(客戶、員工、企業),並且正在執行 Firebase 調用檢查以查看當前登錄的用戶並顯示與當前用戶匹配的視圖。 問題是正在為與當前用戶 UID 不匹配的員工/業務視圖執行的代碼,從而導致崩潰。 當用戶 UID 與這些配置文件不匹配時,如何阻止此代碼執行? 我已經為視圖放置了 PRINT 語句,因此在控制台的圖片中您可以看到“員工視圖”在“客戶視圖”之前被調用,因為客戶已登錄 UID 與“員工視圖”中的 Firebase 調用不匹配因此崩潰。

class Add: UIViewController {

@IBOutlet weak var customerAdd: UIView!
@IBOutlet weak var employeeAdd: UIView!
@IBOutlet weak var businessAdd: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    let uid = Auth.auth().currentUser?.uid
    print(uid)
    
    self.customerAdd.isHidden = true
    self.employeeAdd.isHidden = true
    self.businessAdd.isHidden = true
    
    print(datapass)
    print("Printing datapass here")
    
    checkIfCustomerIsSignedIn()
}

func checkIfCustomerIsSignedIn() {
    print("Called 1")
     Auth.auth().addStateDidChangeListener({ (auth, user) in
        print("Called 2")
         if (user != nil) {
            print("Called 3")
             Database.database().reference().child("user_profiles").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
                 if snapshot.exists() {
                    print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
                    self.customerViewData = true
                    self.employeeViewData = false
                    self.businessViewData = false
                    
                    self.customerAdd.isHidden = false
                    self.employeeAdd.isHidden = true
                    self.businessAdd.isHidden = true
                 } else {
                     print("customer is not signed in")
                     //self.checkIfEmployeeIsSignedIn()
                 }
             })
         }
     })
 }

 func checkIfEmployeeIsSignedIn() {
     Auth.auth().addStateDidChangeListener({ (auth, user) in
         if (user != nil) {
             Database.database().reference().child("employees").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
                 if snapshot.exists() {
                     print("employee is Signed In")
                     print("employee ADD")
                    self.customerViewData = false
                    self.employeeViewData = true
                    self.businessViewData = false
                    
                    self.customerAdd.isHidden = true
                    self.employeeAdd.isHidden = true
                    self.businessAdd.isHidden = true
                 } else {
                     print("employee is not singed in")
                     self.checkIfBusinessIsSignedIn()
                 }
             })
         }
     })
 }
 
 func checkIfBusinessIsSignedIn() {
     Auth.auth().addStateDidChangeListener({ (auth, user) in
         if (user != nil) {
             Database.database().reference().child("Businesses").child((user?.uid)!).observeSingleEvent(of: .value, with: { snapshot in
                 if snapshot.exists() {
                     print("Business is Signed In")
                     print("Business ADD")
                    self.customerViewData = false
                    self.employeeViewData = false
                    self.businessViewData = true
                    
                    self.customerAdd.isHidden = true
                    self.employeeAdd.isHidden = true
                    self.businessAdd.isHidden = false
                 } else {
                     print("No account is logged in so show anonymous")
                     self.customerViewData = true
                     self.employeeViewData = false
                     self.businessViewData = false
                    
                     self.customerAdd.isHidden = false
                     self.employeeAdd.isHidden = true
                     self.businessAdd.isHidden = true
                 }
             })
         }
     })
 }

在此處輸入圖像描述

在此處輸入圖像描述

我建議您嘗試發布更多代碼。 例如, customerViewDataemployeeViewDatabusineesViewData在哪里。 數據通行證從何而來? 沒有足夠的信息。

無論如何,我真的建議您根據用戶類型更改顯示數據的方式。 我認為最合乎邏輯的方法是使用三個不同的視圖,每個視圖都有它的 VC 和一個父視圖 controller,它檢查用戶權限並決定顯示哪個視圖。 與僅使用一個時在同一屏幕上顯示 3 (3.) 個視圖相比,這也更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM