Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

250
Vistas
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.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

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

over 4 years ago · Santiago Trujillo Denunciar

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) }
over 4 years ago · Santiago Trujillo Denunciar

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) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda