5

¿Debería ser posible tener un observador NSNotification estático (como el código siguiente)? Tengo algunos problemas, y creo que puede deberse a mi estructura de clase singleton.¿Clase como observador NSNotification?

No siempre tengo una instancia de clase para escuchar las notificaciones, pero las propiedades estáticas de esta clase se quedan para el ciclo de vida de mi aplicación.

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

Respuesta

9

El primer problema puede ser su selector de — que debe ser @selector(action:).

Además, ¿está seguro de que desea registrar la notificación en init (que no tiene ninguna llamada al [super init], que puede ser otro problema)? Eso significa que su notificación será (re) registrada cada vez que cree una instancia de la clase. Puede considerar implementar un verdadero objeto singleton en lugar de métodos de clase.

+0

Fue el selector, gracias. Edité mi publicación para reflejar que estaba llamando '[super init]' (no publiqué toda mi función). Además, tengo un cheque que se asegura de que no se llame varias veces, por lo que tampoco es un problema. ¿Tiene un enlace que muestre cómo hacer un "singleton verdadero" en Objective-C? – Dov

+0

[La entrada de wikipedia] (http://en.wikipedia.org/wiki/Singleton_pattern#Objective-C) es un buen ejemplo de las dos técnicas principales. A menudo uso la implementación no estricta. Ver también esta pregunta y respuestas: http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – bosmacs