validation后Firebase uid返回nil(Swift)

在我的应用程序中,一旦打开,我会检查用户是否已在初始视图的viewdidload中进行了身份validation。 如果它们已经过身份validation,我会对主视图执行segue。 我现在甚至将uid打印到日志上并正确打印。

override func viewDidLoad() { super.viewDidLoad() if ref.authData != nil { let uid = ref.authData.uid print(uid) 

然后,我会在应用程序中执行相同操作,以便在用户单击其配置文件设置时获取一些用户信息。 我写了完全相同的代码来获取他们的uid,但这次uid返回nil并且因为错误而崩溃

“致命错误:在展开Optional值时意外发现nil”

这是firebase还是模拟器问题?

编辑 :此问题仅发生两次。 否则,代码本身按预期工作,这让我想知道它是否是firebase或模拟器问题。

您想使用observeAuthEventWithBlock方法,它是一个实时身份validation侦听器。

 override func viewDidAppear() { let ref = Firebase(url: "https://.firebaseio.com") ref.observeAuthEventWithBlock({ authData in if authData != nil { // user authenticated print(authData) self.performSegueWithIdentifier("LoginToOtherView", sender: nil) } else { // No user is signed in } }) } 

关于你遇到的确切错误我不确定,但是一个快速的方式来做你的代码(并避免你的错误)将是调用:

 if let uid = ref.authData.uid { print(uid) } 

此代码安全地解包authData和UID。

我遇到了这个问题,花了我几个小时。 然后我意识到我只是忘记这样做:

 ref = FIRDatabase.database().reference() 

之前

 var ref: FIRDatabaseReference!