Domanda

Nel mio iPad, in una classe mi iscrivo ad una notifica:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];

Il mio metodo selectedList: aspetto:

- (void)selectedList:(NSNotification*)notification
{
    NSLog(@"received notification");
}

Poi, in un'altra classe (un UITableViewController) ho posto che la notifica quando viene selezionata una riga:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"posting notification");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}

posso confermare che la notifica viene pubblicato, perché "la notifica distacco" viene registrato alla console, ma "notifica ricevuta" non viene mai chiamato, il che significa che la notifica non viene ricevuto e il selettore non è stato chiamato. Non riesco a capire che cosa sta causando questo.

Grazie

È stato utile?

Soluzione

La causa più probabile è che non si è in realtà chiamando addObserver:selector:name:object:. Non si dispone di una linea di registrazione là; sei sicuro che il codice è in esecuzione?

La seconda causa più probabile è che si sta chiamando removeObserver: prima della notifica è distaccato. Questo è più comunemente in dealloc (che dovrebbe sempre chiamata removeObserver se hai mai osservato niente). L'errore qui sarebbe che l'oggetto osservazione ha deallocato prima della notifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top