2009-05-09 10 views
66

Qualcuno può mostrarmi un esempio di oggetto Cocoa Obj-C, con una notifica personalizzata, come attivarlo, sottoscriverlo e gestirlo?Esempio di notifica personalizzata di cacao

+4

domanda Vague. Prova a fare una domanda più specifica o cerca nella documentazione di Apple. – danielpunkass

+6

Normalmente non commenterei una domanda come questa, ma visto che hai ricevuto un "con" allora il mio può essere un "pro". Questa domanda consente una * risposta concisa * che tratta rigorosamente l'argomento. Voglio solo scoprire una cosa semplice - non * raschiare * la documentazione di Apple (che con ogni probabilità varrebbe comunque la pena). Quindi grazie per aver fatto questa domanda. Vedo che il tuo +15 atm sulla domanda è congruente con il mio sentimento. – Jacksonkr

+1

+1. Grazie. –

risposta

80
@implementation MyObject 

// Posts a MyNotification message whenever called 
- (void)notify { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self]; 
} 

// Prints a message whenever a MyNotification is received 
- (void)handleNotification:(NSNotification*)note { 
    NSLog(@"Got notified: %@", note); 
} 

@end 

// somewhere else 
MyObject *object = [[MyObject alloc] init]; 
// receive MyNotification events from any object 
[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil]; 
// create a notification 
[object notify]; 

Per ulteriori informazioni, consultare la documentazione di NSNotificationCenter.

+0

Qual è il punto di utilizzo della notifica? Perché non chiamare [object handleNotification] direttamente? –

+3

Giunto libero. Nota il commento "// altrove" ... La notifica è una specie di messaggio broadcast. Qualsiasi istanza di oggetto può ascoltare una notifica e non è necessario conformarsi a un particolare protocollo delegato o simile. Possono esserci molte istanze che ascoltano un singolo messaggio. Il mittente non ha bisogno di avere dei riferimenti alle istanze dell'oggetto che desidera informare. –

45

Fase 1:

//register to listen for event  
[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(eventHandler:) 
    name:@"eventType" 
    object:nil ]; 

//event handler when event occurs 
-(void)eventHandler: (NSNotification *) notification 
{ 
    NSLog(@"event triggered"); 
} 

Fase 2:

//trigger event 
[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"eventType" 
    object:nil ]; 
+0

Oh, grazie mille per il grande esempio. Questo è esattamente ciò di cui ho bisogno. – d12frosted

+0

Splendido :) Grazie mille –

5

Assicurati di annullare la registrazione di notifica (osservatore), quando l'oggetto viene deallocato. La documentazione Apple afferma: "Prima che un oggetto che sta osservando le notifiche sia deallocato, deve comunicare al centro notifiche di interrompere l'invio di notifiche".

per le notifiche locali il codice successivo è applicabile:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

E per gli osservatori di notifiche distribuite:

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; 
Problemi correlati