2012-01-17 20 views
15

Tengo el siguiente código que agrega un observador en la carga de la vista.Eliminar Observer cuando se usa addObserverForName: usingBlock

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserverForName:@"com.app.livedata.jsonupdated" 
                 object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) { 
                  NSLog(@"JSONUPDATED"); 
                 }]; 
} 

Y esto dispara bien. Sin embargo, cuando se descarga la vista y confirmo que se llama a dealloc, la notificación sigue activada.

No parece haber un método para desactivar este observador?

Respuesta

25

Parece que la solución es rastrear el objeto en la Vista y luego puede hacer referencia a él en los métodos dealloc.

id observer = [[NSNotificationCenter defaultCenter] addObserverForName: /* ... */ ]; 

Y luego retire de la siguiente manera:

[[NSNotificationCenter defaultCenter] removeObserver:observer]; 
observer = nil; 
+1

éste no funciona si tenga mismos observadores en 2 clases diferentes y el observador nunca se retira: / –

Cuestiones relacionadas