Como criar uma classe para enviar e receber eventos através do NSNotificationCenter no Objective-C?

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

Pergunta

Preciso criar duas classes e ambas devem ser capazes de enviar e receber os eventos através dos métodos NSNotificationCenter.

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

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

O mesmo acontece com outra classe diz que Classb também deve poder enviar e receber os eventos. Como pode ser feito?

Foi útil?

Solução

Idealmente, um objeto começaria a observar eventos interessantes assim que sua inicialização. Portanto, ele registrará todos os eventos interessantes com o NotificationCenter dentro de seu código de inicialização. sendEvent: é basicamente um invólucro ao redor do postNotification: método.

@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

O mesmo para a classe B.

Editar 1:

Você pode estar complicando demais o problema. Um centro do NSNotification atua como um corretor a quem todos os eventos são enviados e decide a quem encaminhar isso. É como o Padrão de observador Mas os objetos não observam ou notificam diretamente um ao outro, mas através de um corretor central - o NSNotificationCenter neste caso. Com isso você não precisa conectar diretamente duas classes que podem estar interagindo entre si com um #include.

Ao projetar suas aulas, não se preocupe com a forma como um objeto seria notificado ou como ele notificaria outros objetos interessados, apenas que um objeto precisa ser notificado sobre alguns eventos quando ocorrer, ou precisa informar o NSNotficationCenter de seus eventos quando eles ocorrem.

Então, em resumo, descubra todos os eventos que um objeto deve conhecer e registrar esses eventos neste init() método, e não os registra no dealloc() método.

Você pode encontrar isso Tutorial básico útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top