• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

210
Views
Swift 4 Intento de presentar ViewController cuya vista no está en la jerarquía de ventanas

Estoy usando swift 4 y estoy tratando de crear una vista de alertView cuando hay un error al registrar a un usuario que usa Firebase . Tengo una IBAction para el botón de registro que registrará al usuario usando texto de dos textfields de texto, uno para correo electrónico y otro para contraseña.

Básicamente, estoy tratando de mostrar una vista de alertview cuando hay un error con el proceso de registro, por ejemplo, hay un textfield .

ingrese la descripción de la imagen aquí

He adjuntado una captura de pantalla de la función donde está ocurriendo. Sé que, de hecho, estoy recibiendo un error porque la declaración de impresión genera un error, si lo hay.

Independientemente de si hay un error o no, no se muestra ninguna vista de alerta y la aplicación realiza la transición de todos modos.

2019-01-15 21:40:26.368924-0500 Pronto[9036:225268] Advertencia: intento de presentar cuya vista no está en la jerarquía de ventanas

Esta es la salida que obtengo para la vista de alerta que ahora aparece. He mirado todas las otras publicaciones sobre este mismo problema, pero ninguna parece funcionar.

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Este problema ocurre debido a su jerarquía de vistas.

Debe averiguar cuál es su controlador de vista Actual/Superior en la jerarquía de vista y presentar su alerta sobre él.

Para averiguar el controlador de vista superior, use el siguiente código:

 func getTopMostViewController() -> UIViewController? { var topMostViewController = UIApplication.shared.keyWindow?.rootViewController while let presentedViewController = topMostViewController?.presentedViewController { topMostViewController = presentedViewController } return topMostViewController }

Y presente su alerta sobre el controlador de vista superior y use el hilo principal para presentar una alerta porque los cierres pueden haber funcionado en otro hilo.

 DispatchQueue.main.async { getTopMostViewController()?.present(alertController, animated: true, completion: nil) }

Consulte esta respuesta de pila: Swift 3 Intento de presentar cuya vista no está en la jerarquía de ventanas

about 3 years ago · Santiago Trujillo Report

0

Intente usar ViewDidAppear en lugar de View did Load.

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let alertViewController = UIAlertController(title: "Any", message: "Any Custom Message", preferredStyle: .alert) alertController.addAction(UIAlertAction(title: "ANy", style: .cancel, handler: nil)) present(alertViewController, animated: true, completion: nil) }
about 3 years ago · Santiago Trujillo Report

0

Puede obtener el controlador de vista superior y hacer que ese controlador de vista presente la alerta. Entonces, en lugar de self.present use este enfoque y vea si funciona:

 let topViewController = UIApplication.shared.keyWindow?.rootViewController topViewController?.present(alertController, animated: true, completion: nil)

También intente presentar en el hilo principal, ya que está tratando de mostrar la alerta en el controlador de finalización createUser:

 DispatchQueue.main.async { self.present(alertController, animated: true, completion: nil) }
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error