解包可选值[Firebase]时意外发现致命错误为零

时间:2017-07-25 05:58:08

标签: ios firebase swift3 firebase-authentication optional

我一直在寻找我的问题的答案,但没有一个解决方案适合。我认为这是firebase的一个问题,因为我使用断点来查看错误发生的确切时间和位置。每次火山喷射方法运行时都会发生。

使用firebase我正在尝试使用createUser方法对用户进行签名。问题是每次我运行这个方法我的应用程序崩溃并将其打印到控制台。我已经检查过以确保我的插座连接在一起并且它们不是。然而,当我连接它们时,我仍然收到了问题。更有趣的是,当我打印变量电子邮件和密码的内容时,它打印出来。这是我的代码:

import UIKit
import Firebase

class RegisterVC: UIViewController, UITextFieldDelegate {

     @IBOutlet weak var fName: UITextField!
     @IBOutlet weak var LName: UITextField!
     @IBOutlet weak var Username: UITextField!
     @IBOutlet weak var Email: UITextField!
     @IBOutlet weak var Password: UITextField!
     @IBOutlet weak var confirmPassword: UITextField!

     let firebaseAuth = Auth.auth()

     //when sign up is tapped
     @IBAction func signUpTapped(_ sender: Any) {

          signUpAction()
     }

     var ref: DatabaseReference!


     override func viewDidLoad() {
          super.viewDidLoad()
          ref = Database.database().reference()
          self.fName.delegate = self
          self.LName.delegate = self
          self.Username.delegate = self
          self.Email.delegate = self
          self.Password.delegate = self
          self.confirmPassword.delegate = self
     }
     //when return button is pressed ... what should happen
     func textFieldShouldReturn(_ textField: UITextField) -> Bool {

          fName.resignFirstResponder()
          LName.resignFirstResponder()
          Username.resignFirstResponder()
          Email.resignFirstResponder()
          Password.resignFirstResponder()
          confirmPassword.resignFirstResponder()

          return true
}

     //hides keyboard if you touch view
     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
          self.view.endEditing(true)
     }


     //function is called from sign up button tapped function

     func signUpAction(){

          guard let email = Email.text, let password = Password.text else{
          print("Something is Happenening")
          return}

          print(email)
          print(password)

          //adds user under the authentication tab on firebase
          firebaseAuth.createUser(withEmail: email, password: password) { (user, err) in

        if err != nil {
            print(err!)
            print(email)
            print(password)
            return  }
        else{
            self.createProfile(user!)
            self.performSegue(withIdentifier: "signUpToMainScene", sender: nil) }
    }
}

我的缩进可能会看起来因为这实际上是我第一次在堆栈溢出时发布。这些是我尝试的一系列事项:

  • 将参数更改为常规字符串
  • 尝试更换电子邮件Email.text!和密码一样
  • 重新连接插座然而我不认为这是问题,因为我仍然可以打印变量
  • 更新了pod以查看是否有新版本的firebase

错误:在解包可选值时意外发现致命错误

请帮我解决这个问题,同时我对swift和xcode还是比较新的所以请尝试解释一下因为我还在学习很多新东西。同时忽略这些评论,它们可以帮助我记住每个函数和特定语句的内容。

我的实际代码确实包含了createProfile函数,我只是没有添加,因为我认为它是无关紧要的

1 个答案:

答案 0 :(得分:0)

根据您的问题,firebase返回nil值,后面的函数有一个firebase块,它返回user&amp;的可选值。错误,你强行打开。

试试此代码,让我知道<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <items> <xsl:for-each select="items/item"> <item> <xsl:variable name = "vCurrentItemType" select ="@type"/> <xsl:choose> <xsl:when test = "$vCurrentItemType = 'a'"> <xsl:call-template name="DrawParent"> <xsl:with-param name = "pCurrentItem" select = "current()"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="DrawChild"> <xsl:with-param name = "pCurrentItem" select = "current()"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </item> </xsl:for-each> </items> </xsl:template> <xsl:template name = "DrawParent"> <xsl:param name = "pCurrentItem" /> <itemType> <xsl:value-of select ="$pCurrentItem/@type"/> </itemType> <itemID> <xsl:value-of select ="$pCurrentItem/value/@ID"/> </itemID> <itemRelationship> <xsl:value-of select ="$pCurrentItem/value/@relation"/> </itemRelationship> <itemParentID></itemParentID> </xsl:template> <xsl:template name = "DrawChild"> <xsl:param name = "pCurrentItem" /> <itemType> <xsl:value-of select ="$pCurrentItem/@type"/> </itemType> <itemID> <xsl:value-of select ="$pCurrentItem/value/@ID"/> </itemID> <itemRelationship> <xsl:value-of select ="$pCurrentItem/value/@relation"/> </itemRelationship> <itemParentID>insert parent ID here</itemParentID> </xsl:template> </xsl:stylesheet> 的价值。

user