Comment créer une classe pour envoyer et recevoir des événements par NSNotificationCenter en Objective-C?

StackOverflow https://stackoverflow.com/questions/2286347

Question

Je dois créer deux classes et les deux devraient être en mesure d'envoyer et de recevoir les événements à travers le NSNotificationCenter methods.ie Les deux doivent avoir les méthodes sFinEvénement et receiveEvent:

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

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

Même en tant que telle autre classe disent ClassB devrait également être en mesure d'envoyer et de recevoir les événements. Comment peut-il être fait?

Était-ce utile?

La solution

Idéalement un objet commencerait l'observation des événements intéressants dès son initialisation. Ainsi, il enregistrera tous les événements intéressants avec le NotificationCenter dans son code d'initialisation. sendEvent: est essentiellement une enveloppe 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 chose 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 de transmettre cela à. Il est comme le href="http://en.wikipedia.org/wiki/Observer_pattern" mais les objets ne pas directement observer ou notifier l'autre, mais plutôt par un courtier central - le NSNotificationCenter dans ce cas. Avec cela, vous n'avez pas besoin de se connecter directement deux classes qui pourraient être en interaction les uns avec les autres avec un #include.

Lors de la conception de vos cours, ne vous inquiétez pas de la façon dont un objet serait être averti ou comment il informerait les autres objets intéressés, seulement qu'un objet doit être averti au sujet de certains événements quand ils se produisent, ou il doit informer NSNotficationCenter de ses événements quand ils se produisent.

Donc en bref, trouver tous les événements qu'un objet devrait connaître et d'enregistrer ces événements dans cette méthode init(), et les unregister dans la méthode dealloc().

Vous pouvez trouver cette tutoriel de base utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top