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.
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
Essayez-vous de passer des messages entre la classe A et la classe B? – Anurag
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