【发布时间】:2020-10-22 12:46:36
【问题描述】:
我知道网上有很多关于这个的帖子,我也知道这个错误信息是什么意思,我遇到过至少 50 次。虽然我已经尝试了大约 1 小时,但我不知道为什么我在此代码上收到此错误:
usernameSignUp?.setPadding()
emailSignUp?.setPadding()
passwordSignUp?.setPadding()
usernameSignUp?.setBottomBorder()
emailSignUp?.setBottomBorder()
passwordSignUp?.setBottomBorder()
emailSignIn?.setPadding()
emailSignIn?.setBottomBorder()
passwordSignIn?.setPadding()
passwordSignIn?.setBottomBorder()
signUpButton?.layer.cornerRadius = 4
}
func validateFields() -> String? {
if usernameSignUp.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
emailSignUp.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
passwordSignUp.text?.trimmingCharacters(in: .whitespacesAndNewlines) == ""{
return "Please fill in all fields"
}
let cleanedPassword = passwordSignUp.text!.trimmingCharacters(in: .whitespacesAndNewlines)
if isPasswordValid(cleanedPassword) == false {
return "8 characters or more"
}
return nil
}
@IBAction func signUpTapped(_ sender: Any) {
let error = validateFields()
if error != nil {
showError(error!)
}
else {
let userName = usernameSignUp.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let email = emailSignUp.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let password = passwordSignUp.text!.trimmingCharacters(in: .whitespacesAndNewlines)
Auth.auth().createUser(withEmail: email, password: password) { (result, error) in
if error != nil {
self.showError("Invalid email")
}
else {
let db = Firestore.firestore()
db.collection("users").addDocument(data: ["username": userName, "uid": result!.user.uid]) { (error) in
if error != nil {
self.showError("Username could not be created")
}
}
self.transitionToHome()
}
}
}
}
func isPasswordValid(_ password : String) -> Bool {
let passwordTest = NSPredicate(format: "SELF MATCHES %@", ".{8,}")
return passwordTest.evaluate(with: password)
}
func showError(_ message:String) {
errorLabel.text = message
errorLabel.alpha = 1
}
func transitionToHome() {
let homeViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? ViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()
}
@IBAction func emailLoginTapped(_ sender: Any) {
}
@IBAction func loginTapped(_ sender: Any) {
if let emailsignin = emailSignIn.text?.trimmingCharacters(in: .whitespacesAndNewlines),
let passwordsignin = passwordSignIn.text?.trimmingCharacters(in: .whitespacesAndNewlines) {
Auth.auth().signIn(withEmail: emailsignin, password: passwordsignin) { (result, error) in
if error != nil {
self.errorLabel3.text = error!.localizedDescription
self.errorLabel3.alpha = 1
}
else {
self.transitionToHome()
}
}
}
}
}
它发生在前两行代码中。如果有人可以提供帮助,将不胜感激。
【问题讨论】:
-
如果您知道错误消息的含义,那么您就知道
emailSignIn或paasswordSignIn的.text属性是nil。您希望我们如何帮助您找出为什么,而无需了解您如何为他们分配价值? -
了解可选选项,否则您的 Swift 之旅将只包括与它们抗争和受苦
-
@NewDev 你是什么意思我是怎么给他们赋值的?
-
@appledeveloper123 - 大概,您希望
emailSignIn.text和/或passwordSignIn.text不是nil,所以在某个地方应该为这个属性分配一个值,但没有。它不在您显示的代码中。因此,换句话说,您在问题中发布的代码无法重现您的错误。 -
@NewDev 我还有一堆其他代码,当它真的归结为它时,我只是想让我的第一个注册和登录页面。
emailSignIn和passwordSignIn都只是用户输入登录的文本字段。我想我的问题是如何防止它为零?
标签: swift xcode optional fatal-error