首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:“线程1: EXC_BAD_ACCESS (code=2,address=0x7ffee0234ff0)”

错误:“线程1: EXC_BAD_ACCESS (code=2,address=0x7ffee0234ff0)”
EN

Stack Overflow用户
提问于 2020-07-28 21:08:08
回答 1查看 1.7K关注 0票数 0

我有这段代码,当我使用"super.viewDidLoad()"运行应用程序时,我有"Thread 1: EXC_BAD_ACCESS (code=2,address=0x7ffee0234ff0)“错误.有人能帮帮我吗?

在互联网上,他们说我必须连接我的开发者帐户,但我没有。

这是代码:

代码语言:javascript
复制
import Foundation
import UIKit
import FirebaseAuth
import FirebaseDatabase



class SignUpController : UIViewController {



//Fonction pour scroller
private let scrollView: UIScrollView = {
    let scrollView = UIScrollView.self()
    scrollView.clipsToBounds = true
    return scrollView
    
}()

//MARK : Outlets
@IBOutlet weak var artistnameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var confirmationPasswordTextField: UITextField!

@IBOutlet weak var signupButton: UIButton!
@IBOutlet weak var loginButton: UIButton!

//MARK : Properties


override func viewDidLoad() {
    super.viewDidLoad()
    viewDidLoad()
    
    
//Add subviews
    view.addSubview(scrollView)
    scrollView.addSubview(artistnameTextField)
    scrollView.addSubview(emailTextField)
    scrollView.addSubview(passwordTextField)
    scrollView.addSubview(confirmationPasswordTextField)
    scrollView.addSubview(signupButton)
    scrollView.addSubview(loginButton)
    
    //Design
    setupButtons()
    
    
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showLogin" {
        let VCDestination = segue.destination as! LoginController
        VCDestination.myMail = emailTextField.text!
    }
    if segue.identifier == "showLogin" {
        let VCDestination = segue.destination as! LoginController
        VCDestination.myPassword = passwordTextField.text!
    }
}




//MARK : Private Methods
private func setupButtons() {
    signupButton.layer.cornerRadius = 20
    
    loginButton.layer.cornerRadius = 20
    loginButton.layer.borderWidth = 3
    loginButton.layer.borderColor = UIColor.lightGray.cgColor
}

private func setupTextFieldManager() {
    artistnameTextField.delegate = self
    emailTextField.delegate = self
    passwordTextField.delegate = self
    
    let tapGesture = UITapGestureRecognizer (target: self, action: #selector(hideKeyboard))
    view.addGestureRecognizer(tapGesture)
}

//MARK : Actions
@IBAction func signUpButton(_ sender: UIButton) {
    performSegue(withIdentifier: "showLogin", sender: nil)
}



@objc private func hideKeyboard() {
    artistnameTextField.resignFirstResponder()
    emailTextField.resignFirstResponder()
    passwordTextField.resignFirstResponder()
}



@IBAction func signupButtonWasPressed(_ sender: UIButton) {
    if artistnameTextField !== "" as AnyObject && emailTextField !== "" as AnyObject && passwordTextField !== "" as AnyObject && confirmationPasswordTextField.text == passwordTextField.text {
        
        
        Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!) { (authResult, error) in
            if error != nil {
                print(error.debugDescription)
                self.alertUserLoginError()
            } else {
                print ("Inscription en cours...")
                
                let ref = Database.database().reference()
                let userID = Auth.auth().currentUser?.uid
                
                ref.child("users").child(userID!).setValue(["artistName": self.artistnameTextField.text])
                
                self.performSegue(withIdentifier: "goToHome", sender:  self)
            }
        }
        
    } else {
        print("Veuillez remplir tous les champs.")
    }
}
@IBAction func loginButtonWasPressed(_ sender: UIButton) {
    print("Redirection vers l'écran de connexion...")
}

func alertUserLoginError() {
    let alert = UIAlertController(title: "Erreur", message: "Veuillez remplir tous les champs", preferredStyle: .alert)
    
    alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel, handler: nil))
    present(alert, animated: true)
}


}

extension SignUpController: UITextFieldDelegate{
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    
    return true
}


}

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 21:28:57

为了简洁起见,这里有一个名为“AppLifecycle”的概念,它本质上是iOS系统按特定顺序调用的方法。请记住,计算机一次只能运行一件事情,每个CPU。所以它必须按某种顺序进行。iOS生命周期事件如下所示。

  • loadView()
  • viewDidLoad()
  • viewWillAppear()
  • viewDidAppear()
  • didReceiveMemoryWarning()
  • viewWillDisappear()
  • viewDidDisappear()

现在,请记住,还有其他几个取决于您正在做什么,但这些是最常见的。

有了90%的这些生命周期方法,在你看不到的背景中有更多的事情正在发生。这就是super.methodName()调用发挥作用的地方。它允许您在给定的生命周期事件中添加其他功能,而不会丢失该方法提供的任何其他功能。否则,您可能会丢失加载视图所需的内容。super.methodName保留了以前的所有功能。

现在,针对您的问题,您有以下代码行。

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    viewDidLoad()
    //A bunch more code after this.
} 

看看在很多情况下都需要的生命周期方法,注意在viewDidLoad()中调用super.viewDidLoad,这意味着主线程被卡住了。它通过调用它的方法循环,然后又是另一个viewDidLoad()调用。反过来,它一次又一次地循环,直到崩溃。有一个时间和地方递归,然而,这不是其中之一,这是一个完全不同的主题。

最终,您的解决方案是在您的viewDidLoad()之后删除super.viewDidLoad()方法调用,这将解决正在发生的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63142782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档