2012-01-17 13 views
15

Ho il seguente codice che aggiunge un osservatore nel caricamento della vista.Rimuovi Observer quando si utilizza addObserverForName: usingBlock

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

E questo si accende bene. Tuttavia quando la vista viene scaricata e confermo che il dealloc è chiamato la notifica sta ancora sparando.

Non sembra essere un metodo per disattivare questo osservatore?

risposta

25

Sembra che la soluzione sia tracciare l'oggetto nella vista e quindi fare riferimento ai metodi dealloc.

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

e quindi rimuovere come segue:

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

questo non funziona se avere gli stessi osservatori in 2 classi diverse e l'osservatore non viene mai rimosso: / –

Problemi correlati