2010-02-18 10 views
5

tengo que crear dos clases y ambos deben ser capaces de enviar y recibir los eventos a través de la methods.ie NSNotificationCenter Ambos deben tener los SendEvent y receiveEvent métodos:¿Cómo crear una clase para enviar y recibir eventos a través de NSNotificationCenter en Objective-C?

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

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

Igual que tal otra clase ClassB decir también debe poder enviar y recibir los eventos. ¿Cómo puede hacerse esto?

Respuesta

10

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.

+0

También he dado @classB en classA.h, así que ahora puedo hacerlo en ambas clases como @classA en classB.h también. – Cathy

+0

¿Estás tratando de pasar mensajes entre la clase A y la clase B? – Anurag

+0

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

Cuestiones relacionadas