我一直在寻找我的问题的答案,但没有一个解决方案适合。我认为这是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) }
}
}
我的缩进可能会看起来因为这实际上是我第一次在堆栈溢出时发布。这些是我尝试的一系列事项:
错误:在解包可选值时意外发现致命错误
请帮我解决这个问题,同时我对swift和xcode还是比较新的所以请尝试解释一下因为我还在学习很多新东西。同时忽略这些评论,它们可以帮助我记住每个函数和特定语句的内容。
我的实际代码确实包含了createProfile函数,我只是没有添加,因为我认为它是无关紧要的
答案 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