2010-02-18 8 views
5

Je dois créer deux classes et les deux devraient être en mesure d'envoyer et de recevoir les événements à travers le methods.ie NSNotificationCenter deux devraient avoir les méthodes sFinEvénement et receiveEvent:Comment créer une classe pour envoyer et recevoir des événements via NSNotificationCenter dans Objective-C?

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

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

mêmes en tant que telle autre classe devrait également dire ClassB être capable d'envoyer et de recevoir les événements. Comment ceci peut être fait?

Répondre

10

Idéalement, un objet commencerait à observer des événements intéressants dès son initialisation. Donc, il va enregistrer tous les événements intéressants avec le NotificationCenter dans son code d'initialisation. sendEvent: est essentiellement un wrapper autour de la méthode 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 

même pour la classe B.

Edit 1:

Vous pourriez être trop compliquer le problème. Un NSNotificationCenter agit comme un courtier à qui tous les événements sont envoyés et il décide à qui transmettre. C'est comme Observer pattern mais les objets ne s'observent pas directement ou ne se notifient pas mutuellement, mais plutôt via un courtier central - le NSNotificationCenter dans ce cas. Avec cela, vous n'avez pas besoin de connecter directement deux classes qui pourraient interagir entre elles avec un #include. Lors de la conception de vos classes, ne vous inquiétez pas de la façon dont un objet serait averti ou comment il notifierait d'autres objets intéressés, seulement qu'un objet doit être averti de certains événements lorsqu'ils se produisent ou doit informer NSNotficationCenter de ses événements quand ils se produisent. Donc, en bref, découvrez tous les événements qu'un objet doit connaître et enregistrez ces événements dans cette méthode init(), et désinscrivez-les dans la méthode dealloc(). Vous pouvez trouver cette basic tutorial utile.

+0

J'ai aussi donné @classB dans classA.h, alors maintenant je peux aussi le faire dans les deux classes comme @classA dans classB.h aussi. – Cathy

+0

Essayez-vous de passer des messages entre la classe A et la classe B? – Anurag

+0

En fait, ma demande est de faire une classeA avec un NSNotificationCenter et en utilisant l'objet, je devrais pouvoir créer la méthode sendEvent() et la méthode SubscribeEvent(). Maintenant ClassA devrait être capable de recevoir des événements et sendEvents à n'importe quelle autre classe. Comment le faire? – Cathy

Questions connexes