5

Sollte es möglich sein, einen statischen NSNotification Beobachter zu haben (wie der Code unten)? Ich habe einige Probleme, und ich denke, dass es aufgrund meiner Singleton-Klassenstruktur sein kann.Klasse als NSNotification-Beobachter?

Ich habe nicht immer eine Klasseninstanz zum Abhören der Benachrichtigungen, aber die statischen Eigenschaften dieser Klasse bleiben für den Lebenszyklus meiner Anwendung erhalten.

- (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"); 
} 

Antwort

9

Das erste Problem Ihr Selektor sein kann — die @selector(action:) sein sollte.

Auch Sie sind sicher, dass Sie die Meldung in init registrieren möchten (die jeden Anruf [super init] fehlt, was ein weiteres Problem sein kann)? Das bedeutet, dass Ihre Benachrichtigung jedes Mal neu registriert wird, wenn Sie eine Instanz der Klasse erstellen. Sie könnten in Erwägung ziehen, ein echtes Singleton-Objekt anstelle von Klassenmethoden zu implementieren.

+0

Es war der Selektor, danke. Ich habe meinen Beitrag bearbeitet, um zu reflektieren, dass ich '[super init]' nannte (ich habe meine gesamte Funktion nicht veröffentlicht). Außerdem habe ich eine Überprüfung, die sicherstellt, dass es nicht mehrmals aufgerufen wird, also ist das auch kein Problem. Hast du einen Link, der zeigen würde, wie man in Objective-C einen "echten Singleton" macht? – Dov

+0

[Der Wikipedia-Eintrag] (http://en.wikipedia.org/wiki/Singleton_pattern#Objective-C) ist ein gutes Beispiel für die zwei Haupttechniken. Ich verwende oft die nicht strikte Implementierung. Siehe auch diese Frage & Antworten: http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – bosmacs