UIButton 点击​​,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase

Posted

技术标签:

【中文标题】UIButton 点击​​,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase【英文标题】:UIButton click, Alamofire POST call, doesnt performSegue with a successful Firebase Login 【发布时间】:2021-04-15 14:28:54 【问题描述】:

我有一个简单的按钮操作

在进入此之前,我会验证电子邮件和密码,但这是我的 Firebase 代码。当您单击按钮时,它将进入VerifyUserInformation 函数,并且响应将吐出。基本上,VerifyUserInformation 中的 segue 不会为我运行,dismiss 功能也不会关闭模态(呈现全屏)。

有什么办法可以解决这个问题?

        Auth.auth().signIn(withEmail: emailOutlet.text!, password: passwordOutlet.text!)  [weak self] user, error in
            guard let strongSelf = self else  return 
            
                if let error = error 
                    self!.displaySnackbar(messageString: "\(error.localizedDescription)")
                    return
                
            
            self!.preferences.setValue(true, forKey:SHARED_PREF_USER_LOGGED_IN_KEY)

            
            var firstTimeUser = self!.preferences.bool(forKey:FIRST_TIME_USER)
            
            print("\(self!.TAG) FirstTimeUser: \(firstTimeUser)")

            if (firstTimeUser) 
                print("\(self!.TAG) This is the first time the user is using the application.")
                self?.VerifyUserInformation(firebaseId: "\(Auth.auth().currentUser!.uid)")
             else 
                print("\(self!.TAG) User can head into the Application.")
                self!.performSegue(withIdentifier: "MainScreen", sender: nil)
                self?.progressBar.isHidden = true
                self!.loginButtonOutlet.isHidden = false
            
            
            
            
        

为了验证用户,我运行了这个函数。

func VerifyUserInformation(firebaseId: String) 
    
    let urlString = ADD_USER_FOR_ACCOUNT
    
    let param = [
       FROM_APP: "true",
       USER_FIREBASE_ID: firebaseId,
       GET_USER_ACCOUNT_INFORMATION: "true"
        ] as [String : Any]
    
    
    AF.request(urlString, method: .post, parameters: param ,encoding: URLEncoding.default).responseJSON 
    response in
      switch response.result 
        case .success:
            print("\(self.TAG)\n***Response***\n\(response)\n***END***")
            if let result = response.value 
                let JSON = result as! NSDictionary

                let errorResponse = JSON["error"] as! Int
                if (errorResponse == 1) 
                    print("\(self.TAG) Error verifying the user.")
                    self.displaySnackbar(messageString: "Error verifying user. Try again.")
                 else 
                    print("\(self.TAG) User is verified")
                    let messageResponse = JSON["message"] as! String
                    if (messageResponse == "user has items") 
                        print("\(self.TAG) User has items, go into MainScreen")
                        DispatchQueue.main.async 
                            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) 
                                self.performSegue(withIdentifier: "MainScreen", sender: nil)
                                self.dismiss(animated: false, completion: nil)
                                self.preferences.setValue(false, forKey:FIRST_TIME_USER)
                                self.loginButtonOutlet.isHidden = false
                                self.progressBar.isHidden = true
                            
                        
                        
                     else 
                        print("\(self.TAG) User has 0 items, go into Second Onboarding")
                        DispatchQueue.main.async 
                            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) 
                                self.performSegue(withIdentifier: "SecondOnBoarding", sender: nil)
                                self.dismiss(animated: false, completion: nil)
                                self.loginButtonOutlet.isHidden = false
                                self.progressBar.isHidden = true
                            
                        
                    
                
            
            
            break
        case .failure(let error):
            self.loginButtonOutlet.isHidden = false
            self.progressBar.isHidden = true
            self.displaySnackbar(messageString: "Error getting user information. Try again.")
            print("\(self.TAG) \(error)")
        
    
    
    
    
    

【问题讨论】:

您能否发布您的AF 请求的printDebug(result) 的结果? 【参考方案1】:

删除dismiss()后,它开始工作了。

【讨论】:

以上是关于UIButton 点击​​,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

如何在整个应用程序中设置 UIButton 点击​​声音?

Swift 项目:ReactiveSwift+MVVM+RealmSwift+Alamofire+OM

点击 UIButton 以编程方式创建另一个 UIButton

依次调用两个Alamofire函数

iOS-UIButton防止连续点击(点击抖动)

UIButton:使点击区域大于默认点击区域