Tengo el UIApplicationDelegate
protocolo en mi clase principal AppDelegate.m, con el applicationDidBecomeActive
método definido.
Quiero llamar a un método cuando la aplicación regrese del fondo, pero el método está en otro controlador de vista. ¿Cómo puedo verificar qué controlador de vista se muestra actualmente en el applicationDidBecomeActive
método y luego hacer una llamada a un método dentro de ese controlador?
NSNotificationCenter
. ¡Gracias!Swift 3, 4 Equivalente:
agregando observador
quitar observador
llamar de vuelta
fuente
viewDidLoad
oviewWillAppear:animated
por ejemplo. Y puede eliminar un observador cuando ya no necesite notificaciones, o cuando su instancia de observador se desasigne en el métodoEquivalente a Swift 2 :
fuente
removeObserver
en Swift:deinit
método.Swift 4.2
Añadir observador
Eliminar observador
Manejar evento
fuente
Con Swift 4, Apple informa a través de una nueva advertencia de compilación que evitamos el uso
#selector
en este escenario. La siguiente es una forma mucho más segura de lograr esto:Primero, cree una var perezosa que pueda usar la notificación:
Si necesita que se incluya la notificación real, simplemente reemplácela
_
connotification
.A continuación, configuramos la notificación para observar si la aplicación se activa.
El gran cambio aquí es que en lugar de llamar a
#selector
, ahora llamamos a la var creada anteriormente. Esto puede eliminar situaciones donde se producen bloqueos de selector no válidos.Finalmente, eliminamos al observador.
fuente
#selector
puede llamar a un método declarado como@objc
atributo en Swift 4.removeObserver(self
porque self no se asignó al agregar observador.let observer = NotificationCenter.default.addObserver
Entonces deberíasremoveObserver(observer
@objc
. Sin embargo, cuando lo intento, aparece una advertencia en la consola (Xcode 11.3.1 (11C504), Swift 13.3): No se puede finalizar BackgroundTask: no existe una tarea en segundo plano con el identificador. Incluso si guardo el observador en una variable como NSObjectProtocol.@objc
variante.Swift 5
fuente
La forma combinada:
fuente