Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

389
Views
Pantalla negra de iOS al poner la aplicación en primer plano después de un tiempo en segundo plano

Estoy tratando de eliminar todos los guiones gráficos de nuestra aplicación iOS, ya que son un gran desastre cuando se trabaja en equipo con Git.

Ahora estoy configurando el ViewController inicial en el método application(_:didFinishLaunchingWithOptions:) de AppDelegate:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) let launchViewController = LaunchView() window!.rootViewController = launchViewController window!.makeKeyAndVisible() [...] return true }

LaunchView es un controlador de vista simple responsable de enrutar al usuario al inicio de sesión o a la pantalla principal dependiendo de si ha iniciado sesión.

Antes de esto, LaunchView se configuró como inicial en Main.storyboard .

Ya eliminé estas líneas del archivo Info.plist :

 <key>UIMainStoryboardFile</key> <string>Main</string>

Todo funciona bien, excepto cuando dejamos la aplicación en segundo plano durante un par de horas sin cerrarla a la fuerza (no estoy seguro de cuánto tiempo se necesita para reproducir esto) y luego volvemos a poner la aplicación en primer plano, todo en negro. se muestra la pantalla, como si el controlador raíz desapareciera. Y tenemos que matar la aplicación y volver a abrirla para poder usarla.

Esto me está volviendo loco porque es muy difícil de reproducir, ya que si dejas la aplicación en segundo plano solo unos minutos, funciona bien. Sospecho que tiene algo que ver con el estado de suspensión de la aplicación, pero no estoy muy seguro.

¿Sabes dónde puede estar el problema?

¡Gracias!

EDITAR

Tal vez esto tenga algo que ver con el problema: en LaunchView, estoy enviando al usuario a la pantalla principal (si está conectado) con el siguiente código:

 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let rootVC = UIStoryboard.main.rootViewController if let snapshot = appDelegate.window?.snapshotView(afterScreenUpdates: true) { rootVC.view.addSubview(snapshot); appDelegate.window?.rootViewController = rootVC UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: { snapshot.layer.opacity = 0; }, completion: { (status) in snapshot.removeFromSuperview() }) } else { appDelegate.window?.rootViewController = rootVC }

¿Es posible que iOS elimine rootViewController en algún momento?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Resulta que el problema estaba relacionado con el efecto de transición que involucraba una instantánea al intercambiar el rootViewController de la window .

Eliminé el efecto de transición y simplemente cambié rootViewController . ¡Ahora está funcionando bien!

En el código, cambié esto:

 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let rootVC = UIStoryboard.main.rootViewController if let snapshot = appDelegate.window?.snapshotView(afterScreenUpdates: true) { rootVC.view.addSubview(snapshot); appDelegate.window?.rootViewController = rootVC UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: { snapshot.layer.opacity = 0; }, completion: { (status) in snapshot.removeFromSuperview() }) } else { appDelegate.window?.rootViewController = rootVC }

A esto:

 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let rootVC = UIStoryboard.main.rootViewController appDelegate.window?.rootViewController = rootVC

¡Gracias por toda tu ayuda! Espero que esta respuesta sea útil para alguien más.

over 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!