Come creare una classe di inviare e ricevere gli eventi attraverso NSNotificationCenter in Objective-C?

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

Domanda

Ho bisogno di creare due classi e entrambi dovrebbero essere in grado di inviare e ricevere gli eventi attraverso il NSNotificationCenter methods.ie Entrambi dovrebbero avere i metodi sendEvent e receiveEvent:

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

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

Lo stesso in quanto tale, un'altra classe dicono ClassB dovrebbe anche essere in grado di inviare e ricevere gli eventi. Come si può fare?

È stato utile?

Soluzione

Idealmente un oggetto avrebbe cominciato osservando eventi interessanti, non appena la sua inizializzato. Così registrerà tutti gli eventi interessanti con la NotificationCenter all'interno del suo codice di inizializzazione. sendEvent: è fondamentalmente un wrapper per il metodo postNotification:.

@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

Lo stesso vale per la classe B.

Modifica 1:

Si potrebbe essere over-complicare il problema. Un NSNotificationCenter agisce come un mediatore al quale vengono inviati tutti gli eventi e si decide chi di trasmettere quello a. E 'come il Observer modello ma gli oggetti non direttamente osservare o notificare a vicenda, ma piuttosto attraverso un mediatore centrale - l'NSNotificationCenter in questo caso. Con che non è necessario collegare direttamente due classi che potrebbero interagiranno tra loro con un #include.

Nel progettare le vostre classi, non preoccupatevi di come un oggetto otterrebbe notificato o come sarebbe notificare altri oggetti interessati, solo che un oggetto ha bisogno di ricevere la notifica di alcuni eventi quando si verificano, o ha bisogno di informare NSNotficationCenter di i suoi eventi quando si verificano.

Così, in breve, per saperne di tutti gli eventi che un oggetto dovrebbe conoscere e registrare quegli eventi in questo metodo init(), e annullare la registrazione nel metodo dealloc().

È possibile trovare questo tutorial di base utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top