2012-04-17 29 views
6

Estoy trabajando en un proyecto en Xcode versión 4.2.1 y en iOS 5.0. Me pregunto qué función se ejecutará cuando finalice por completo una aplicación, lo que significa que incluso el momento en que los usuarios fuerzan a la aplicación que se ejecuta en segundo plano a terminar en la pantalla de inicio. Yo estaba asumiendo que¿Qué función se invoca cuando finaliza la aplicación de iPhone?

(void)applicationWillTerminate:(UIApplication *)application

se llamaría, pero resultó que no fue llamado incluso después de terminar la aplicación en el fondo. Lo que básicamente quiero hacer es llamar a un método que creé justo antes de que la aplicación finalice por completo, así que necesito saber qué función se llama al final de la aplicación.

Gracias.

+0

Podría por favor seleccione/marque en una de las respuestas. –

Respuesta

1

Si la aplicación ya está suspendida, no recibirá más notificaciones. Observe la notificación didEnterBackground.

+0

¿Quiere decir que no puedo darme cuenta de lo que quiero hacer mientras esté en la pantalla de inicio? En cuanto a la función, no la encontré aunque veía ese tipo de función. – Max

+0

-1: no hay notificación de "willSuspend" o mensaje de delegado. Probablemente quiera "didEnterBackground". – rickster

+0

Es posible que no lo desee porque quiero llamar a un método cuando la aplicación está terminada por completo, no al presionar el botón de inicio. Es decir, no quiero llamar a mi método cuando estoy ingresando el fondo. – Max

0
- (void)applicationWillTerminate:(UIApplication *)application 

Está en el protocolo UIApplicationDelegate.

0

El documentation here explica el comportamiento de este caso.

En resumen, solo recibirá el mensaje applicationWillTerminate: si la aplicación se está ejecutando (ya sea en primer plano o en segundo plano) cuando se termine. Por lo tanto, a menos que su aplicación se ejecute en primer plano o en uno de los modos de fondo de larga ejecución (por ejemplo VoIP, audio o una tarea de larga duración indicada por beginBackgroundTaskWithExpirationHandler) pasará del estado background al estado suspended con bastante rapidez. En este caso, nunca recibirá el mensaje applicationWillTerminate:.

5

Here's a good overview de las notificaciones del ciclo de vida de la aplicación & delegan mensajes en iOS 4.0 y posterior. En resumen ...

Tu aplicación generalmente nunca verá terminará, porque el sistema generalmente solo finaliza tu aplicación una vez que ya está suspendida (en el fondo). Una vez que se suspende su aplicación, no tiene más posibilidades de actuar (*), por lo que no hay devolución de llamada para eso.

didEnterBackground delegado mensaje o notificación debe considerarse su última oportunidad para limpiar o guardar el estado antes de la posible terminación.


(*) De acuerdo, su aplicación puede hacer cosas si está en uno de los modos de ejecución fondo compatibles, como audio, VoIP, o la navegación, pero en ese caso, o bien no ha sido suspendido sin embargo, o no lo ha sido suspendido con un punto de entrada específico para ese modo de fondo.

+0

Entonces, en el caso de que un usuario finalice por la fuerza la aplicación que se ejecuta en segundo plano, no habría una buena manera de llamar a mi método. Gracias por tu ayuda. – Max

+0

Probablemente no recibirá una notificación incluso entonces; a menos que el usuario finalice su aplicación a través del conmutador de la aplicación en un par de segundos hasta que se quede en segundo plano, su aplicación ya estará suspendida. – rickster

-1

Los tres métodos serán útiles:

- (void)applicationWillResignActive:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 
18

método "applicationWillTerminate" será llamado sólo cuando la aplicación es no en estado de suspensión mientras se terminado.

Para entender esto, considerando actualmente su aplicación está en estado activo de primer plano, ir a través de dos casos siguientes:

Caso 1: Cuando solo toque botón de Inicio, la aplicación va directamente al estado de suspensión llamando métodos - (1) applicationWillResignActive y luego (2) applicationDidEnterBackground.

Ahora, cuando intenta salir/finalizar la aplicación, tocando dos veces el botón de inicio y deslizando la pantalla de la aplicación actual desde las pantallas de la aplicación reciente, la aplicación está en estado suspendido. Por lo tanto, "applicationWillTerminate" no se invocará el método.

Caso 2: Cuando doble toque botón de Inicio, la aplicación va a inactivo estado llamando al método - (1) applicationWillResignActive.

Ahora cuando intenta salir/finalizar la aplicación, deslizando hacia arriba la pantalla de la aplicación actual desde las pantallas de la aplicación reciente, la aplicación se encuentra en estado inactivo (no en estado suspendido) mientras finaliza. Por lo tanto, se llamará al "applicationWillTerminate".

Mira lo que dicen de Apple: enter image description here

Para obtener más información acerca de la mirada - Apple's Official Documentation on applicationWillTerminate(_:)

+0

¡Gran respuesta, gracias! Sería genial tener también un enlace a la documentación de Apple. –

Cuestiones relacionadas