¿Accede a la instancia actual del controller de vista desde el delegado de la aplicación en swift?

mi controller de vista tiene muchos methods y variables inicializados. Cuando mi aplicación entra en segundo plano, necesito acceder a un valor particular en el controller de vista desde el delegado de la aplicación.

He intentado hacer esto en el delegado de la aplicación:

vc = ViewController() 

… pero eso crea una nueva instancia, y los valores se configuran esencialmente como nuevos.

Tienes dos opciones, la segunda es mejor por layout.

Primera opción: (lo que quieres)

No sé la estructura de los controlleres de vista, así que permíteme suponer que tienes un controller de vista raíz, podrías getlo desde AppDelegate través de:

 rootVC = self.window?.rootViewController 

Y si desea get el controller de vista presentado desde el controller de vista raíz (como muchas aplicaciones, el controller de vista presentado es un controller de barra de tabs):

 guard let tabBarController = rootVC.presentedViewController as? TabBarController else { return } 

Una vez que obtenga su controller de barra de tabs, puede encontrar el controller de vista en la matriz de controlleres de vista:

 tabBarController.viewControllers 

Básicamente, lo que estoy tratando de decir es que tienes que saltar a través de los controlleres de vista desde la raíz para llegar al controller que deseas, luego tomar la variable desde allí. Esto es muy propenso a errores, y generalmente no se recomienda.

Segunda opción (mejor práctica):

Haga que su controller de vista se registre como un observador para la notificación UIApplicationWillResignActiveNotification . Esto le permitirá hacer lo que desee desde el controller de vista cuando su aplicación esté a punto de entrar en segundo plano.