2009-12-26 19 views
5

Estoy tratando de manejar las llamadas telefónicas y el modo de espera y cosas de esa naturaleza. He añadido la función- (void) applicationWillResignActive: (UIApplication *) la aplicación nunca se llama

- (void)applicationWillResignActive:(UIApplication *)application 

y

- (void)applicationDidBecomeActive:(UIApplication *)application 

a mi UIApplicationDelegate. Al salir del modo de espera, siempre se llama a "applicationDidBecomeActive". Sin embargo, el problema es que "applicationWillResignActive" nunca se llama.

Me preguntaba si alguien se ha encontrado con este problema y si alguien encontró alguna razón.

EDITAR

Más información, descubrí que actualización del lazo de mi motor que se ejecute desde applicationDidFinishLaunching estaba causando que me pierda el mensaje. Me llamo

while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, .002, FALSE) == kCFRunLoopRunHandledSource); 

para atrapar todos los mensajes de iphone pero no parece captar el mensaje resignActive antes de convertirse en inactivo.

Intentar bifurcar un hilo de mi ciclo de actualización está causando extraños errores. ¿Alguien tiene alguna sugerencia de solución rápida?

+1

De acuerdo con los documentos applicationWillResign activa cuando se invoca una ventana superpuesta aparece o cuando el dispositivo está bloqueado. Si bloquea manualmente el iPhone, ¿recibe la llamada? – lyonanderson

Respuesta

6

Se llama en iOS 4.0 cuando se pulsa el botón de inicio.

Los siguientes métodos de delegado se llaman cuando el botón de inicio es golpeado en IOS 4,0

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

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

Y cuando se pulse dos veces el botón de inicio y de nuevo vuelve a lanzar la aplicación, se llaman los siguientes métodos de delegado.

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



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

agregue 'NSLog (@"% s ", __PRETTY_FUNCTION __);' a cada método de aplicaciónDelegate en su lugar para una forma más rápida de imprimir el método que actualmente reside –

2

No creo

- (void)applicationWillResignActive:(UIApplication *)application 

se llama cuando se recibe una llamada telefónica. Creo que el sistema operativo espera a que el usuario responda o rechace la llamada telefónica. Si decliné, entonces la aplicación dice alive y se llama

- (void)applicationDidBecomeActive:(UIApplication *)application 

. Si se responde, a continuación, su aplicación se le dice a salir y va a recibir

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

Asegúrese de permitir

- (void)applicationDidFinishLaunching:(UIApplication *)application 

para volver antes de ejecutar el bucle del juego. Una técnica consiste en utilizar la función

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 

en el delegado aplicación y ejecutar el bucle del juego después de un retraso de, digamos," 0,01" Después de hacer esto, el mensaje debe ser capaz de disparar correctamente. Creo que la razón por la que se pisoteó el mensaje fue porque el ciclo de ejecución estaba atascado en applicationDidFinishLaunching y no fue capaz de insertar ningún otro mensaje UIApplicationDelegate en la cola.

-2
- (void)applicationWillResignActive:(UIApplication *)application { 
/* 
Sent when the application is about to move from active state to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
*/ 
} 
Cuestiones relacionadas