Frage

Ich hoffe jemand kann mit meiner Meldung Problem helfen. Ich habe eine Benachrichtigung, die korrekt gesetzt zu sein scheint, aber es ist nicht wie erwartet geliefert. Ich entwickle ein Dokument basierte Anwendung. Der Delegierte / Dokumentenklasse bucht die Benachrichtigung, wenn er liest aus einer gespeicherten Datei:

[[NSNotificationCenter defaultCenter] postNotificationName:notifyBsplinePolyOpened object:self];

Protokollierung sagt mir, dass diese Zeile erreicht ist, wenn ich ein gespeichertes Dokument öffnen.

In der DrawView Klasse, ich habe Beobachter für die Window Benachrichtigung und die bsplinePoly Datei Benachrichtigung öffnen:

[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(mainWindowOpen:)
                                                          name:NSWindowDidBecomeMainNotification
                                                          object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(savedBspline:)
                                                          name:notifyBsplinePolyOpened
                                                          object:nil];

- (void)        mainWindowOpen:(NSNotification*) note
{
        NSLog(@"Window opened");
        _mainWindow = [note object];
}

- (void) savedBspline:(NSNotification*) note
{
        NSLog(@"savedBspline called");
        NSLog(@"note is %@", [note name]);
}

Das Verhalten ist seltsam. Wenn ich das Hauptfenster speichern und schließen und wieder öffnen, erhalte ich die Meldung „Fenster geöffnet“, aber nicht die „savedBspline genannt“ -Meldung. Wenn ich ein Hauptfenster geöffnet, und öffnen Sie eine zuvor gespeicherte Sitzung verlassen, bekomme ich das „Fenster geöffnet“ -Meldung und die „savedBspline genannt“ -Meldung.

habe ich Online-Diskussion und Apple DevCenter Dokumentation gesucht, aber ich habe dieses Problem nicht gesehen.

War es hilfreich?

Lösung

NSNotification Lieferung funktioniert wie erwartet ( zumindest wenn keine NSNotificationQueue die beteiligt sind ). Sie werden sofort ausgeliefert, nicht auf andere Threads, ohne Verzögerung, und nicht gefiltert.

Ich würde sagen, sind einige Ihrer Objekte noch nicht instanziiert, wenn die Benachrichtigung ausgelöst oder die Reihenfolge der Ausführung auf andere Weise vermischt: Sie sagen, dass Sie die Benachrichtigung hinterlassen, wenn sie aus einer gespeicherten Datei zu lesen, aber dann Sie‘ erneut die Meldung fehlt beim Speichern und Schließen des Fensters.

Um Hilfe Debuggen ich schlage vor, Sie setzen eine Benachrichtigung Beobachter in Sie AppDelegate bis die einfach alle Benachrichtigungen protokolliert. Sie sind sicher, dann, dass alle Meldungen geliefert werden, wie erwartet.

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