2010-06-29 14 views
36

El método de delegado applicationWillTerminate no se llama en iOS 4.0 Cuando presiono el botón de inicio, veo que se llaman los métodos de aplicación applicationWillResignActive y applicationDidEnterBackground delegate.ApplicationWillTerminate en iOS 4.0

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSLog(@"Application Did Resign Active"); 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"Application Did Enter Background"); 
} 

Y cuando me toque dos veces el botón de inicio y de nuevo en marcha la aplicación del Encuentro los métodos de delegado applicationWillEnterForeground y applicationDidBecomeActive están siendo llamados.

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSLog(@"Application Will Enter Foreground"); 
} 



- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSLog(@"Application Did Become Active"); 
} 

Pero yo quiero saber cuándo se llamará el método delegado applicationWillTerminate, donde hago algunas rutinas de copia de seguridad DB/archivo.

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

} 

Incluso trató de golpear el signo menos y suprime la aplicación ejecutándose en segundo plano, pero todavía no requerían ningún método delegado.

¿Ideas ???

+0

Usted hizo realmente poner algo de código en 'applicationWillTerminate: ', ¿verdad? Tu pregunta actualmente muestra un cuerpo de método vacío. – BoltClock

+0

[aquí] (http: // stackoverflow.com/questions/7818045/applicationwillterminate-when-is-it-called-and-when-not) es la solución que encontré hasta el momento – swiftBoy

Respuesta

52

De la Guía de programación de aplicaciones iPhone:

Incluso si desarrolla su aplicación utilizando SDK de iPhone 4 y más tarde, todavía se debe estar preparado para su aplicación a terminarse. Si la memoria se vuelve limitada, el sistema podría eliminar aplicaciones de la memoria para hacer más espacio. Si su aplicación está actualmente suspendida, el sistema elimina su aplicación de la memoria sin previo aviso. Sin embargo, si la aplicación se está ejecutando en segundo plano, el sistema hace llamar el método del delegado aplicación applicationWillTerminate:. Su aplicación no puede solicitar tiempo de ejecución de fondo adicional de este método.

Así que sí, applicationWillTerminate: general no será llamado muy a menudo en iOS 4. Si tiene que guardar los datos, debe hacerlo en tanto applicationWillTerminate: y applicationDidEnterBackground:.

+5

Alrededor del minuto 22 del video citado por falconcreek, se dice que solo las aplicaciones de segundo plano ejecutan asesinado a través del ícono rojo menos obtener el beneficio de una aplicaciónWillTerminate: llamar antes de ser asesinado. Los suspendidos mueren de inmediato. Está listado en 'Terminación', y no está 100% despejado, pero parece que esto se aplica a la terminación del sistema y la terminación iniciada por el usuario a través del signo menos. –

+0

Al ejecutar iOS 4 en un iPhone 3G, parece que applicationWillTerminate: se llama después de applicationDidEnterBackground: cuando se presiona el botón de inicio. –

+3

@David: bueno, el iPhone 3G no es compatible con la multitarea, así que tendría sentido. –

2

Tengo una solución para la terminación de aplicaciones cuando el usuario pulsa el botón de Inicio en iOS4. Esto llamará al método delegado applicationWillTerminate lugar de entrar en proceso de fondo.

  1. abrir su archivo info.plist
  2. agregar la clave UIApplicationExitsOnSuspend
  3. establecer la nueva clave de SI
+4

Eso cerrará inmediatamente su aplicación en lugar de simplemente suspenderla. Por lo tanto, cuando el usuario relanza la aplicación, tendrá que volver a comenzar, eliminando el beneficio de la rápida conmutación de aplicaciones. En general, se desaconseja usar UIApplicationExitsOnSuspend a menos que su aplicación realmente necesite salir (http://tinyurl.com/2fgkf5p). – Brian

+0

@Brian: no hay razón para desalentar este comportamiento si se adapta mejor a las necesidades de su aplicación y base de usuarios, de lo contrario no tendría sentido la existencia de la función. – ninehundredt

+0

@lakehousetech, no tiene que creer en mi palabra. La Guía de programación de aplicaciones de iOS dice: "Optar por la ejecución en segundo plano no es recomendable, pero puede ser la opción preferida bajo ciertas condiciones". Que es más o menos lo que dije :-). La guía también dice que las aplicaciones que comienzan en frío deben restaurar su estado anterior, por lo que la terminación inmediata es raramente necesaria. – Brian

1

En realidad también se puede utilizar este paso para hacerlo.

  1. Abra el archivo de info.plist
  2. agregar la clave -> aplicación no se ejecuta en segundo plano
  3. establecer este valor a YES
Cuestiones relacionadas