2009-12-26 14 views
5

Sto provando a gestire le chiamate telefoniche, lo standby e le cose di questo tipo. Ho aggiunto la funzione- (void) applicationWillResignActive: l'applicazione (UIApplication *) non viene mai chiamata

- (void)applicationWillResignActive:(UIApplication *)application 

e

- (void)applicationDidBecomeActive:(UIApplication *)application 

alla mia UIApplicationDelegate. Quando esce dallo standby, viene chiamato sempre "applicationDidBecomeActive". Tuttavia il problema è "applicationWillResignActive" non viene mai chiamato.

Mi chiedevo se qualcuno si è imbattuto in questo problema e se qualcuno ha trovato un motivo.

EDIT

Maggiori informazioni, ho scoperto che l'aggiornamento del ciclo di mio motore che viene eseguito da applicationDidFinishLaunching stava causando mi manca il messaggio. Chiamo

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

per catturare tutti i messaggi iPhone, ma non sembra per catturare il messaggio resignActive prima di diventare inattivo.

Il tentativo di eseguire il fork di un thread per il mio ciclo di aggiornamento sta causando strani bug di crash. Qualcuno ha qualche suggerimento per la soluzione rapida?

+1

Secondo la documentazione applicationWillResign attivo viene invocata quando una finestra sovrapposta apre o quando il dispositivo è bloccato. Se blocchi manualmente l'iPhone, ricevi la chiamata? – lyonanderson

risposta

6

Viene chiamato in iOS 4.0, quando viene premuto il pulsante Home.

I seguenti metodi delegato vengono chiamati quando il pulsante Home è colpito in iOS 4,0

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

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

E quando si fa doppio tap sul tasto Home e di nuovo rilanciare l'App, i seguenti metodi delegato vengono chiamati.

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



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

aggiungi 'NSLog (@"% s ", __PRETTY_FUNCTION __);' a ciascun metodo AppDelegate invece per un metodo più rapido per stampare il metodo attualmente risi –

2

Non credo

- (void)applicationWillResignActive:(UIApplication *)application 

viene chiamato quando si riceve una telefonata. Penso che il sistema operativo sia in attesa che l'utente risponda o declini la chiamata. Se ho rifiutato, l'app dice vivo e

- (void)applicationDidBecomeActive:(UIApplication *)application 

viene chiamato. Se si risponde, allora la vostra applicazione è detto di uscire e si riceverà

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

siate sicuri di avere

- (void)applicationDidFinishLaunching:(UIApplication *)application 

per tornare prima di eseguire il ciclo di gioco. Una tecnica è quella di utilizzare la funzione

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

sulla delegato applicazione ed eseguire il ciclo di gioco dopo un ritardo di dire" .01" Dopo avere effettuato questa, il messaggio deve essere in grado di sparare in modo corretto. Credo che il motivo per il messaggio stomping era perché il ciclo di esecuzione era bloccato su applicationDidFinishLaunching e non era in grado di inviare altri messaggi UIApplicationDelegate sulla coda.

-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. 
*/ 
} 
Problemi correlati