5

Devrait-il être possible d'avoir un observateur NSNotification statique (comme le code ci-dessous)? J'ai quelques problèmes, et je pense que cela peut être dû à ma structure de classe singleton.Classe en tant qu'observateur NSNotification?

Je n'ai pas toujours d'instance de classe pour écouter les notifications, mais les propriétés statiques de cette classe restent valables pour le cycle de vie de mon application.

- (id)init { 
    [super init] 

    [[NSNotificationCenter defaultCenter] addObserver:[self class] 
              selector:@selector(action:aNotification:) 
               name:@"NSSomeNotification" 
               object:nil]; 
    return self; 
} 

+ (void)action:(NSNotification *)aNotification { 
    NSLog(@"Performing action"); 
} 

Répondre

9

Le premier problème peut être votre sélecteur — qui devrait être @selector(action:).

Etes-vous sûr que vous voulez enregistrer la notification dans init (qui manque un appel à [super init], qui peut-être un autre problème)? Cela signifie que votre notification sera (re) enregistrée chaque fois que vous créez une instance de la classe. Vous pourriez envisager d'implémenter un véritable objet singleton au lieu des méthodes de classe.

+0

C'était le sélecteur, merci. J'ai édité mon post pour refléter que j'appelais '[super init]' (je n'ai pas posté toute ma fonction). De plus, j'ai un contrôle qui fait en sorte qu'il ne soit pas appelé plusieurs fois, donc ce n'est pas un problème non plus. Avez-vous un lien qui montrerait comment faire un "vrai singleton" en Objective-C? – Dov

+0

[L'entrée wikipedia] (http://en.wikipedia.org/wiki/Singleton_pattern#Objective-C) est un bon exemple des deux techniques principales. J'utilise souvent l'implémentation non stricte. Voir aussi cette et les questions suivantes: http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – bosmacs