Lo ideal sería que un objeto comenzara a observar eventos interesantes tan pronto como se inicializara. Por lo tanto, 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.
Edición 1:
Es posible que complicar el problema. Un NSNotificationCenter actúa como un intermediario al que se envían todos los eventos y decide a quién reenviarlo. Es como el Observer pattern pero los objetos no se observan directamente ni se notifican entre sí, sino a través de un intermediario central: el NSNotificationCenter en este caso. Con eso, no es necesario conectar directamente dos clases que podrían interactuar entre sí con un #include
.
Al diseñar sus clases, no se preocupe acerca de cómo un objeto sería notificado o cómo notificaría a otros objetos interesados, solo que un objeto necesita ser notificado sobre algunos eventos cuando ocurren, o necesita informar a NSNotficationCenter de sus eventos cuando ocurren.
En resumen, descubra todos los eventos que un objeto debe conocer y registre esos eventos en este método init()
, y anule el registro en el método dealloc()
.
Puede que este artículo le ayude basic tutorial.
También he dado @classB en classA.h, así que ahora puedo hacerlo en ambas clases como @classA en classB.h también. – Cathy
¿Estás tratando de pasar mensajes entre la clase A y la clase B? – Anurag
En realidad, mi solicitud es hacer una clase A con un NSNotificationCenter y utilizando el objeto de la misma, debería ser capaz de crear el método sendEvent() y el método SubscribeEvent(). Ahora ClassA debería poder recibir eventos y enviar eventos a cualquier otra clase. ¿Cómo hacerlo? – Cathy