Swift - Firebase 函数signInWithEmail 在第一次调用时不执行

2024-03-24

@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(使用前将#替换为@)

Swift - Firebase 函数signInWithEmail 在第一次调用时不执行 的相关文章

  • 具有动态警报正文的快速本地通知

    所以我可以创建一个像这样的本地通知 var localNotification UILocalNotification localNotification fireDate NSDate timeIntervalSinceNow 7 loc
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • SwiftUI:动态“列表”中的“切换”在重用时会破坏其布局?

    我试图展现一种动态List行包含Toggle元素 这Toggle最初布局正确 但是当它们滚动进和滚出视图时 即单元格重用时 它们的布局会中断 最小示例代码 import SwiftUI struct SwitchList View var
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • Google Firebase - 如何删除崩溃报告?

    我最终失明了吗 还是没有明显的方法可以通过 Google Firebase Web 控制台删除 Firebase 崩溃报告 我的 Android 应用程序已成功记录报告 但现在出现大量 开发崩溃 占用了我在控制台中的大部分视图 这使得找到实
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • Firebase 警告:使用 Firebase Cloud Function 搜索数据时使用未指定的索引

    我构建了一个 Firebase 云函数 用于查找 IsNotificationEnabled 值等于 true 的用户 我的部分职能 export const sendPushNotification functions https onR
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt

随机推荐