Wie eine Klasse erstellen Ereignisse durch NSNotificationCenter in Objective-C zu senden und empfangen?

StackOverflow https://stackoverflow.com/questions/2286347

Frage

Ich brauche zwei Klassen zu erstellen und beide sollten die Ereignisse durch die NSNotificationCenter methods.ie zu versenden, und empfangen Beide sollten die sendevent und receiveEvent Methoden haben:

      @implementation Class A
-(void)sendEvent
{
    addObserver:---  name:---- object:---
}

-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end

Samt als solche eine andere Klasse sagt ClassB sollte auch in der Lage sein, die Ereignisse zu senden und empfangen. Wie kann es geschehen?

War es hilfreich?

Lösung

Im Idealfall würde ein Objekt startet interessante Ereignisse zu beobachten, sobald seine initialisiert. So wird es alle interessanten Ereignisse mit dem NotificationCenter in seinem Initialisierungscode registrieren. sendEvent: ist im Grunde ein Wrapper um die postNotification: Methode.

@implementation A

- (id)init {
    if(self = [super init]) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"SomeEvent" object:nil];
    }
    return self;
}

- (void)sendEvent {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil];
}

// Called whenever an event named "SomeEvent" is fired, from any object.
- (void)receiveEvent:(NSNotification *)notification {
    // handle event
}

@end

Das Gleiche gilt für Klasse B.

Bearbeiten 1:

Sie könnten zu verkomplizieren das Problem sein. Ein NSNotificationCenter fungiert als Vermittler, an die alle Ereignisse gesendet werden, und es entscheidet, wer das zu übermitteln. Es ist wie der Observer Muster aber Objekte beobachten nicht direkt oder einander mitteilen, sondern durch eine zentrale Broker - die NSNotificationCenter in diesem Fall. Damit Sie direkt zwei Klassen nicht brauchen keine Verbindung, die mit einem #include miteinander könnte interagieren.

Während Ihre Klassen entwerfen, keine Sorge darüber, wie ein Objekt würde benachrichtigt, oder wie es andere interessierte Objekte benachrichtigen würde, nur, dass sich ein Objekt braucht, um über einige Ereignisse informiert werden, wenn sie auftreten, oder es muss NSNotficationCenter informieren, seine Ereignisse, wenn sie auftreten.

Also kurz gesagt, alle Ereignisse herausfinden, dass ein Objekt wissen sollte und die Ereignisse in dieser init() Methode registrieren und austragen sie im dealloc() Verfahren.

Sie können feststellen, dieses grundlegende Tutorial hilfreich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top