Прежде чем вы прочитаете все это, я прошу прощения за длинный пост, но я хотел объяснить ситуацию как можно больше, потому что я не смог найти аналогичную ошибку в Интернете.
Здравствуйтеребята, так что я делаю это приложение в быстром, и у него есть домашний экран с «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)
}
}
}
}
Если кто-нибудь из вас, ребята, может мне помочь, я был бы очень признателен, все, что мне нужно, чтобы приложение сейчас работало, как ожидалось, с логином, который перенаправляет наглавный экран приложения после того, как пользователь ввел свои учетные данные.
Заранее спасибо