Beispiel für eine benutzerdefinierte Benachrichtigung über Kakao

68

Kann mir bitte jemand ein Beispiel für ein Cocoa Obj-C-Objekt mit einer benutzerdefinierten Benachrichtigung zeigen, wie es ausgelöst, abonniert und behandelt wird?

mattdwen
quelle
4
Vage Frage. Versuchen Sie, eine spezifischere Frage zu stellen, oder durchsuchen Sie die Dokumentation von Apple.
Danielpunkass
6
Normalerweise würde ich eine Frage wie diese nicht kommentieren, aber da Sie einen "Betrug" erhalten haben, kann meiner ein "Profi" sein. Diese Frage ermöglicht eine präzise Antwort, die sich ausschließlich mit dem Thema befasst. Ich möchte nur eine einfache Sache herausfinden - nicht die Dokumentation von Apple durchsuchen (was sich höchstwahrscheinlich sowieso lohnen würde). Vielen Dank, dass Sie diese Frage gestellt haben. Ich sehe, dass Ihre +15 atm bei der Frage mit meinem Gefühl übereinstimmen.
Jacksonkr
Hier ist eine App, die ich geschrieben habe, sie könnte dir helfen, github.com/kylelk/Notification-example/tree/master
kyle k

Antworten:

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

Weitere Informationen finden Sie in der Dokumentation zu NSNotificationCenter .

Jason Coco
quelle
Was bringt es dann, eine Benachrichtigung zu verwenden? Warum nicht einfach [object handleNotification] direkt aufrufen?
user4951
3
Lose Kopplung. Beachten Sie den Kommentar "// woanders" ... Die Benachrichtigung ist eine Art Broadcast-Nachricht. Jede Objektinstanz kann eine Benachrichtigung abhören und muss keinem bestimmten Delegatenprotokoll oder ähnlichem entsprechen. Es kann viele Instanzen geben, die eine einzelne Nachricht abhören. Der Absender muss keine Zeiger auf die Objektinstanz (en) haben, die er benachrichtigen möchte.
Andrew Hodgkinson
45

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

Schritt 2:

//trigger event
[[NSNotificationCenter defaultCenter]
    postNotificationName:@"eventType"
    object:nil ];
mracoker
quelle
6

Stellen Sie sicher, dass Sie die Registrierung der Benachrichtigung (Beobachter) aufheben, wenn die Zuordnung Ihres Objekts aufgehoben wird. In der Apple-Dokumentation heißt es: "Bevor ein Objekt, das Benachrichtigungen beobachtet, freigegeben wird, muss es das Benachrichtigungscenter anweisen, das Senden von Benachrichtigungen zu beenden."

Für lokale Benachrichtigungen gilt der nächste Code:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Und für Beobachter verteilter Benachrichtigungen:

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
Grigori A.
quelle