2009-02-26 17 views
31

Qual è il codice per iscriversi a un evento come applicationWillResignActive in qualsiasi punto della tua applicazione per iPhone?Come reagire a applicationWillResignActive da qualsiasi luogo?

[UPDATE]

mi permetta di riformulare la mia domanda. Non voglio rispondere a questo nel mio delegato dell'applicazione, ma piuttosto ascoltare questo evento da un'altra classe. È possibile o devo passare l'evento dal delegato dell'applicazione alla classe in questione?

risposta

71

Sembra che stiate cercando questo codice.

- (void) applicationWillResign { 
    NSLog(@"About to lose focus"); 
} 

- (void) myMethod { 
    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(applicationWillResign) 
     name:UIApplicationWillResignActiveNotification 
     object:NULL]; 
} 
+10

si dovrebbe anche rimuovere l'osservatore ad un certo punto, di solito in dealloc: \t [[NSNotificationCenter defaultCenter] removeObserver: self]; – LearnCocos2D

+0

@ LearnCocos2D Perché però? – Houssni

+1

NSNotificationCenter potrebbe arrestarsi in modo anomalo durante l'invio di un messaggio a un osservatore deallocato. Dalla documentazione: ["Assicurarsi di richiamare removeObserver: name: object: before notificationObserver o qualsiasi oggetto specificato in addObserver: selector: name: object: is deallocated."] (Https://developer.apple.com/library/mac /documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/addObserver:selector:name:object :) – LearnCocos2D

0

L'argomento e la domanda stanno chiedendo cose leggermente diverse.

L'applicazione riceverà automaticamente l'applicazioneWillResignActive insieme a applicationWillTerminate. Nessun abbonamento è necessario, basta implementare la funzione nella tua app.

Per quanto riguarda il modo di rispondere, questo dipende dall'applicazione. Mentre è possibile scegliere di non fare nulla, il comportamento consigliato è quello di interrompere o rallentare qualsiasi funzionalità non critica. Per esempio. se tu fossi un gioco smetterei di aggiornare il display e/o mettere in pausa il gioco.

4

Implementare il metodo seguito nella vostra delegato applicazione:

-(void)applicationWillResignActive:(UIApplication *)application 

Questo ti permette di reagire quando l'applicazione diventa inattivo - quando questo è il caso, si sta eseguendo, ma non l'invio di eventi in arrivo. Ciò accade, ad esempio, quando si apre una finestra di sovrapposizione o quando il dispositivo è bloccato.

Poco prima che diventi inattivo, l'applicazione pubblica anche una UIApplicationWillResignActiveNotification.

11

Date un'occhiata alla documentazione per il metodo che si sta parlando:

applicationWillResignActive:

Indica il delegato che l'applicazione diventerà inattiva. Questo metodo è facoltativo.

- (void)applicationWillResignActive:(UIApplication *)application 

[...]

Discussione

[...]

Appena prima che diventi inattivo, l'applicazione distacca anche una UIApplicationWillResignActiveNotification.

Problemi correlati