Swift - 命令失败由于信号:分段故障11

时间:2017-07-21 20:28:33

标签: ios swift segmentation-fault

我已经广泛关注其他关于swift的seg故障的帖子,我发现了一个确定我的问题,但现在我的问题是如何解决它?我发现错误是我的signIn函数(注意:我没有更改名称,它实际上作为SIGNUP函数工作并创建用户),当我发表评论时,它解决了问题。但是,我有点需要它,所以我该如何修复呢?

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase

class SignUpViewController: UIViewController {
    @IBOutlet weak var emailField: UITextField!
    @IBOutlet weak var passwordField: UITextField!
    @IBOutlet var usernameField: UITextField!

    var ref: DatabaseReference!
    override func viewDidLoad() {
        super.viewDidLoad()
        ref = Database.database().reference()
    }

    // Actually Sign Up button
    @IBAction func SignIn(_ sender: AnyObject) {
        Auth.auth().createUser(withEmail: emailField.text!, password: passwordField.text!, completion: { (user, error) in
            if error != nil {
                print(error!.localizedDescription)
            } else {
                print("User created...")
                self.ref.child("UserProfile").child(user!.uid).setValue([
                    "username" : self.usernameField.text!
                    ])
            }
        })
    }
}

1 个答案:

答案 0 :(得分:1)

如果没有完整的错误日志,我们无法帮助您,但是,您有许多强制解包(!)。如果任何字符串为null,您的应用程序将崩溃。相反,你应该有条件地打开包装:

if let email = emailField.text, let password = passwordField.text {
    Auth.auth().createUser(withEmail: email, password: password!
    .....
}

同样的逻辑也适用于user

当您确定没有nil时,只强制打开包装。 Surefire崩溃的方式。