2010-10-15 11 views
6

soy nuevo iPhone dev ... estoy construyendo una aplicación que carga los datos de una base de datos sqlite3 local en¿Volver a cargar los datos de la aplicación cuando la aplicación entra en primer plano?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

Al tocar el botón iPhone y lo puso en el fondo y luego lo recuerdo i veo (como siempre) la aplicación de la misma manera que la he dejado. Lo que me gustaría hacer es, cuando viene en primer plano, volver a cargar los datos como si hubieran sido llamados desde cero.

¿Cuál es la forma correcta de hacerlo?

Gracias de antemano c.

Respuesta

13
- (void)applicationDidBecomeActive:(UIApplication *)application { 
} 

Vuelva a cargar los datos en la función anterior del delegado de la aplicación para actualizar los datos cuando la aplicación se ponga en primer plano.

+0

Veo un retraso de un ciclo en la actualización actual de las preferencias del sistema (standardUserDefaults) aquí. por ejemplo, 1. aplicación-a-fondo 2. cambiar la preferencia de la aplicación 3. aplicación-a-primer plano: ¡sin cambios! 4. app-to-background 5. app-to-foreground: ¡allí está! –

+0

loco, así que creo que los valores predeterminados no se guardan por las preferencias del sistema hasta * después de que se invoca * applicationDidBecomeActive(). Lo determiné porque si solo imprimo el valor cada dos meses en mi aplicación, está actualizado. –

+0

puede forzar la sincronización de los valores predeterminados del usuario con [[NSUserDefaults standardUserDefaults] synchronize]; – zambono

3

Puede exit() su aplicación cuando el IOS le notifica que debe ejecutarse en segundo plano, así:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    exit(0); 
} 
+12

No haría esto a mano: hay una clave 'InfoUpplist' UIApplicationExitsOnSuspend' para aplicaciones que no desean ejecutarse en segundo plano. – zoul

+0

Gracias zoul por información interesante ... – SegFault

3

Creo que es el delegado de UIApplication:

- (void)applicationWillEnterForeground:(UIApplication *)application 

En iOS 4.0 y posterior, este método es llamado como parte de la transición de al fondo del estado activo. Puede usar este método para deshacer muchos cambios de su aplicación al ingresar al fondo . La llamada a este método es seguida invariablemente de una llamada al applicationDidBecomeActive: método, que luego mueve la aplicación de inactiva al estado activo.

62

Así que en la clase de aplicaciones Delegado - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions sólo se le podrá llamar a la primera vez que acceda al app.Then se llamará - (void)applicationDidBecomeActive:(UIApplication *)application.

Si su iPhone iOS es 4.0 o posterior, cuando un usuario hace clic en el botón de inicio, primero invocará - (void)applicationWillResignActive:(UIApplication *)application, luego - (void)applicationDidEnterBackground:(UIApplication *)application.

Luego la aplicación se ejecutará en segundo plano hasta que el usuario la mate. Cuando el usuario ingrese de nuevo la aplicación, primero invocará - (void)applicationWillEnterForeground:(UIApplication *)application, luego - (void)applicationDidBecomeActive:(UIApplication *)application.

Por lo tanto, relacionado con su pregunta, debe llamar al applicationWillEnterForeground: o applicationDidBecomeActive: para volver a cargar sus datos. Aunque en el comentario de xcode de estos métodos, Apple sugiere usar applicationDidBecomeActive: para reiniciar las tareas pausadas y/o actualizar la interfaz de usuario; mientras que en el applicationWillEnterForeground:, puede deshacer los cambios que ha realizado al ingresar el fondo.


Para que sea más fácil de ver, puse una etiqueta numérica para cada método. Aquí es cuando se llamará el método.

0 application:(UIApplication *)application didFinishLaunchingWithOptions: 
1 applicationDidBecomeActive: 
2 applicationWillResignActive: 
3 applicationDidEnterBackground: 
4 applicationWillEnterForeground: 
  • Introducir primero la aplicación: llamar a 0, 1;

  • Pulse el botón de inicio: llame a 2, luego 3;

  • Botón de inicio doble (multitarea): llamada 2;

    • si el usuario selecciona otra aplicación o vuelve a presionar el botón de inicio: call 3;

    • si el usuario vuelve a presionar el botón de inicio: llamada 1;

  • Ingrese la aplicación de nuevo: call 4, then 1;

+0

Muchas gracias, explicaciones muy claras! – Cris

+0

Sí, +1, esta es una gran explicación, ¡gracias! – livingtech

+0

ya los he cambiado. ¡gracias! – sbs

Cuestiones relacionadas