2009-05-09 9 views
66

Czy ktoś może mi pokazać przykład obiektu Obak-C Cocoa, z niestandardowym powiadomieniem, jak go uruchomić, zasubskrybować i obsłużyć?Przykład powiadomienia niestandardowego kakao

+4

Vague pytanie. Spróbuj zadać bardziej szczegółowe pytanie lub przeszukaj dokumentację Apple. – danielpunkass

+6

Ja normalnie nie wypowiedziałbym się na takie pytanie, ale widząc jak otrzymałeś "con", moje może być "pro". To pytanie pozwala na * zwięzłą * odpowiedź zajmującą się ściśle tematem. Chcę tylko dowiedzieć się jednej prostej rzeczy - nie * przeszukać * dokumentacji jabłka (która i tak byłaby i tak warta). Dziękuję za pytanie. Widzę, że twoje +15 atm na pytanie jest zgodne z moim sentymentem. – Jacksonkr

+1

+1. Dzięki. –

Odpowiedz

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]; 

Aby uzyskać więcej informacji, zobacz dokumentację dla NSNotificationCenter.

+0

Jaki jest sens korzystania z powiadomień? Dlaczego po prostu nie wywołasz bezpośrednio funkcji [object handleNotification]? –

+3

Luźne połączenie. Zanotuj komentarz "// gdzie indziej" ... Powiadomienie jest rodzajem wiadomości rozgłoszeniowej. Każda instancja obiektu może wysłuchać powiadomienia i nie musi dostosowywać się do żadnego konkretnego protokołu delegata lub podobnego. Może być wiele instancji słuchających pojedynczej wiadomości. Nadawca nie musi mieć wskaźników do wystąpień obiektu, które chce powiadomić. –

45

Krok 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"); 
} 

Krok 2:

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

Och, dziękuję bardzo za świetny przykład. Dokładnie tego potrzebuję. – d12frosted

+0

Przepiękny :) Wielkie dzięki –

5

Upewnij się wyrejestrować powiadomienia (obserwator), gdy obiekt jest zwalniane. Dokumentacja Apple stwierdza: "Zanim obiekt obserwujący powiadomienia zostanie zwolniony, musi powiadomić centrum powiadomień, aby przestał wysyłać powiadomienia".

dla miejscowych Powiadomienia następny kod jest zastosowanie:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

A dla obserwatorów rozmieszczonych Uwagi:

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];