Frage

In meinem iPad-App in einer Klasse I für eine Benachrichtigung registrieren:

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

Meine selectedList: Methode sieht wie folgt aus:

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

Dann in einer anderen Klasse (einem UITableViewController) ich diese Meldung posten, wenn eine Zeile ausgewählt ist:

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

kann ich bestätigen, dass die Benachrichtigung geschrieben wird, weil „Buchungsbenachrichtigung“ an die Konsole angemeldet ist, aber „wurde darüber unterrichtet,“ wird nie genannt, was bedeutet, dass die Mitteilung nicht empfangen wird und die Wähler nicht aufgerufen wurde. Ich kann nicht herausfinden, was das verursacht.

Danke

War es hilfreich?

Lösung

Die wahrscheinlichste Ursache ist, dass Sie nicht wirklich addObserver:selector:name:object: aufrufen. Sie haben noch eine Logging-Linie gibt; sind Sie sicher, dass Code ausgeführt wird?

Die zweite wahrscheinlichste Ursache ist, dass Sie removeObserver: sind anruft, bevor die Benachrichtigung gebucht wird. Dies ist am häufigsten in dealloc (was sollte immer Anruf removeObserver wenn Sie jemals etwas beobachtet haben). Der Fehler hier wäre, dass Ihre Beobachtung Objekt vor der Anmeldung ausgeplant hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top