При нажатии кнопки приложение вылетает с ошибкой, связанной с Firebase - PullRequest
0 голосов
/ 09 июля 2019

Прежде чем вы прочитаете все это, я прошу прощения за длинный пост, но я хотел объяснить ситуацию как можно больше, потому что я не смог найти аналогичную ошибку в Интернете.

Здравствуйтеребята, так что я делаю это приложение в быстром, и у него есть домашний экран с «loginButton» и «signUp»

Я сделал все экраны приложения и его ограничения для обычного файла и после этого, будучисделано, я установил несколько стручков.

pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'GoogleMaps'
pod 'GooglePlaces'

После этого я начал настраивать контроллеры Sign Up и Log in View для связи с firebase.

Регистрация прошла хорошо, но когда я закончил Login, что-то случилось.

Каждый раз, когда я нажимал на кнопку «loginButton», мое приложение зависало без видимой причины (для меня я не настолько опытен в swift, и все еще есть много ошибок, которые я не могу определить)

Ошибка, которую он мне дал, была: «[I-ACS036002] Отчеты экрана аналитики включены. Позвоните + [FIRAnalytics setScreenName: setScreenClass:], чтобы установить имя экрана или переопределить имя класса экрана по умолчанию. Чтобы отключить создание отчетов экрана, установитефлаг FirebaseScreenReportingEnabled для NO (булево) в Info.plist "

Но мне кажется, что это не проблема, так как firebase не дает мне никакой ошибки с SignUp, что странно, потому что обе кнопкиУ меня такая же конфигурацияскажите мне, и я опубликую это.

Я уже пытался удалить кнопку segue, которая переходит с домашнего экрана на экран входа в систему, и ошибка все еще продолжается.

Я уже удалил LoginViewController, который я сделал, чтобы увидеть, действительно ли онбыла любая конфигурация Firebase, в которой я ошибался, но ошибка все еще сохраняется, и я не использую firebase на этом контроллере представления

и, очевидно, уже сделал «Чтобы отключить экранную отчетность, установите флаг FirebaseScreenReportingEnabled на NO (логическое значение»)) в Info.plist ", который Xcode предлагает в ошибке, и все же это сохранилось.в тот раз с другой ошибкой, в основном, она говорила только о том, что я ее отключил и что приложение не может работать так.

Я могу показать вам код контроллера представления регистрации, поскольку он идентиченк логину.

import UIKit
import Firebase

class SignInViewController: UIViewController, UITextFieldDelegate {


    @IBOutlet weak var emailTextfield: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var dismissButton: UIButton!


    var signupButton:UIButton!
    var activityView:UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        //Botão de Login Programatico porque o do desgin estava a dar demasiados problemas... tipo que este não vai dar, lol
        signupButton = RoundedWhiteButton(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
        signupButton.setTitle("Log In", for: .normal)
        signupButton.titleLabel?.font = UIFont.systemFont(ofSize: 18.0, weight: UIFont.Weight.bold)
        signupButton.setTitleColor(textColor, for: .normal)
        signupButton.center = CGPoint(x: view.center.x, y: view.frame.height - signupButton.frame.height - 24)
        //Evento HandleLogin
        signupButton.addTarget(self, action: #selector(handleSignup), for: .touchUpInside)
        signupButton.alpha = 0.5
        //Adicionar à view e chamar função "setLoginButton"
        view.addSubview(signupButton)
        setSignupButton(enabled: false)

        //Rodinha bonita que aparece no signupButton quando os dados estão a ser processados, só para não usar mais um CocoaPod
        activityView = UIActivityIndicatorView(style: .gray)
        activityView.frame = CGRect(x: 0, y: 0, width: 50.0, height: 50.0)
        activityView.center = signupButton.center

        view.addSubview(activityView)

        //já são meninos crescidos, já podem tomar conta de si mesmos.
        emailTextfield.delegate = self
        passwordTextField.delegate = self
        //estava a brincar. isto é para esta brincadeira funcionar como deve de ser xisdê
        emailTextfield.addTarget(self, action: #selector(textFieldChanged), for: .editingChanged)
        passwordTextField.addTarget(self, action: #selector(textFieldChanged), for: .editingChanged)


        //coias bonitas para as "notificações" do teclado
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

        // Do any additional setup after loading the view.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        emailTextfield.becomeFirstResponder()
    }


    //Evento "touchUpInside" no dismissButton, faz com que a view volte para o ecrã principal

    @IBAction func handleDismissButton(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }

    //MARK: Funções

    //MARK: keyboardWillShow
    //recebe uma notificação quando o teclado "aparece", permitindo que o signupButton seja deslocado mais para cima, impedindo-o de ficar escondido atrás do teclado.
    @objc func keyboardWillShow(notification: NSNotification) {
        let info = notification.userInfo!
        let keyboardFrame: CGRect = (info[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

        signupButton.center = CGPoint(x: view.center.x,
                                     y: view.frame.height - keyboardFrame.height - 16.0 - signupButton.frame.height / 2)
        activityView.center = signupButton.center

    }

    //MARK: keyboardWillHide
    //recebe uma notificação quando o teclado "desaparece", permitindo que o signupButton seja deslocado para a sua posiçao inicial.
    @objc func keyboardWillHide(notification: NSNotification){
        signupButton.center = CGPoint(x: view.center.x, y: view.frame.height - signupButton.frame.height)
        activityView.center = signupButton.center
    }

    //MARK: setLoginButton
    //Se o resultado for verdadeiro, o botão fica ativo e sem transparencia.
    func setSignupButton(enabled:Bool) {
        if enabled {
            signupButton.alpha = 1.0
            signupButton.isEnabled = true
        } else {
            signupButton.alpha = 0.5
            signupButton.isEnabled = false
        }
    }

    //Nem sei muito bem, ainda estou para descobrir, mas isto de alguma maneira faz com que o botão "log in" fique ativo

    @objc func textFieldChanged(_ target:UITextField) {
        let email = emailTextfield.text
        let password = passwordTextField.text
        let formFilled = email != nil && email != "" && password != nil && password != ""
        setSignupButton(enabled: formFilled)
    }

    //evento que dá handle ao evento "touchUpInside" do "signupButton"
    @objc func handleSignup() {

        setSignupButton(enabled: false)
        signupButton.setTitle("", for: .normal)
        activityView.startAnimating()

        Auth.auth().createUser(withEmail: emailTextfield.text!, password: passwordTextField.text!) { (user,error) in
            if error != nil{
                print(error!)
            } else {
                print("Registration Successful!")            
                self.performSegue(withIdentifier: "goToMap", sender: self)
            }

        }




    }

}

Если кто-нибудь из вас, ребята, может мне помочь, я был бы очень признателен, все, что мне нужно, чтобы приложение сейчас работало, как ожидалось, с логином, который перенаправляет наглавный экран приложения после того, как пользователь ввел свои учетные данные.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...