2010-10-04 12 views
26

¿Cómo puedo detectar que una aplicación acaba de regresar del "modo en segundo plano"? Quiero decir, no quiero que mi aplicación obtenga datos (cada 60 segundos) cuando el usuario presiona el "botón de inicio". Pero me gustaría hacer una actualización "especial" la primera vez que la aplicación está en modo de primer plano.iphone 4 sdk: detectar el retorno desde el modo de fondo

¿Cómo puedo detectar estos dos eventos:

  1. aplicación va a modo de fondo
  2. aplicación va a modo de primer plano

Gracias de antemano.

François

Respuesta

48

Así es como escuchar a este tipo de eventos:

// Register for notification when the app shuts down 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil]; 

// On iOS 4.0+ only, listen for background notification 
if(&UIApplicationDidEnterBackgroundNotification != nil) 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
} 

// On iOS 4.0+ only, listen for foreground notification 
if(&UIApplicationWillEnterForegroundNotification != nil) 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil]; 
} 

Nota: Los cheques if(&SomeSymbol) aseguran que su código funcionará en iOS 4.0 o superior y también en iOS 3.x - si se construye contra un iOS 4.x o 5.x SDK y establezca el destino de implementación en iOS 3.x su aplicación aún se puede ejecutar en dispositivos 3.x pero la dirección de los símbolos relevantes será nula, y por lo tanto no intentará preguntar para las notificaciones que no existen en los dispositivos 3.x (que bloquearían la aplicación).

Actualización: En este caso, los if(&Symbol) cheques son ahora redundantes (a menos que realmente necesita para apoyar iOS 3, por alguna razón). Sin embargo, es útil conocer esta técnica para verificar si existe una API antes de usarla. Prefiero esta técnica que probar la versión del sistema operativo porque está comprobando si la API específica está presente en lugar de utilizar el conocimiento externo de qué API están presentes en qué versiones del sistema operativo.

+0

gracias por la respuesta rápida! –

5

Si implementa un UIApplicationDelegate, también se puede enganchar en funciones como parte del delegado:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    /* 
    Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 
    */ 
    NSLog(@"Application moving to background"); 
} 


- (void)applicationWillEnterForeground:(UIApplication *)application { 
    /* 
    Called as part of the transition from the background to the active state: here you can undo many of the changes made on entering the background. 
    */ 
    NSLog(@"Application going active"); 
} 

Para ver la referencia al protocolo http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

Cuestiones relacionadas