Cómo crear una clase para enviar y recibir eventos a través NSNotificationCenter en Objective-C?
-
21-09-2019 - |
Pregunta
Es necesario crear dos clases y ambos deben ser capaces de enviar y recibir los eventos a través de la NSNotificationCenter methods.ie Ambos deben tener los métodos SendEvent y receiveEvent:
@implementation Class A
-(void)sendEvent
{
addObserver:--- name:---- object:---
}
-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end
Lo mismo que tal otra clase dicen ClassB también debe ser capaz de enviar y recibir los eventos. ¿Cómo puede hacerse esto?
Solución
Lo ideal sería un objeto comenzar a observar eventos de interés tan pronto como su inicializado. Por lo tanto, se registrará todos los eventos interesantes con el NotificationCenter dentro de su código de inicialización. sendEvent:
es básicamente una envoltura alrededor del método 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 mismo para la clase B.
Editar 1:
Es posible que complicar el problema. Un NSNotificationCenter actúa como un intermediario para los cuales se envían todos los eventos y decide que transmita a que a. Es como el Observador patrón pero los objetos no observan directa o notificar a la otra, sino más bien a través de una corredor de centro - el NSNotificationCenter en este caso. Con esto no es necesario para conectar directamente dos clases que podrían ser interactúan entre sí con una #include
.
Si bien el diseño de sus clases, no se preocupe acerca de cómo conseguiría notificado un objeto o cómo iba a notificar a otros objetos interesados, solo que un objeto tiene que ser notificado acerca de algunos eventos cuando se producen, o se tiene que informar de NSNotficationCenter sus eventos cuando se producen.
Así que en resumen, encontrar todos los eventos que un objeto debería conocer y registrar los acontecimientos en este método init()
, y anular el registro en el método dealloc()
.
Usted puede encontrar esta tutorial básico útiles.