Domanda

Spero che qualcuno può aiutare con il mio problema di notifica. Ho una notifica che sembra essere impostato correttamente, ma non viene recapitato come previsto. Sto sviluppando un'applicazione basata documento. Il delegato / i messaggi di classe documento la notifica quando si legge da un file salvato:

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

Registrazione mi dice che questa linea è raggiunta ogni volta che apro un documento salvato.

Nella classe DrawView, ho gli osservatori per la notifica WindowOpen e il file di notifica bsplinePoly aperto:

[[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]);
}

Il comportamento è strano. Quando ho salvare e chiudere la finestra principale e riaprirlo, ottengo il messaggio “finestra aperta”, ma non il “savedBspline chiamato” messaggio. Se lascio una finestra principale aperta e aprire una sessione salvata in precedenza, ho la “finestra aperta” del messaggio e il “savedBspline chiamato” messaggio.

Ho cercato di discussione online e Apple documentazione DevCenter, ma non ho visto questo problema.

È stato utile?

Soluzione

opere di consegna NSNotification come previsto ( almeno quando non di NSNotificationQueue sono coinvolti ). Vengono consegnati immediatamente, non su altri thread, nessun ritardo, e non filtrato.

direi, alcuni dei vostri oggetti non sono ancora istanziati quando i fuochi di notifica o si mescolano l'ordine di esecuzione in qualche altro modo: Lei dice che si registra la notifica durante la lettura da un file salvato, ma poi si' ri manca la notifica, mentre il risparmio e chiudere la finestra.

Per aiutare il debug vi consiglio di impostare un osservatore di notifica in voi app delegato che registra semplicemente tutte le notifiche. Sei sicuro quindi che tutte le notifiche vengono consegnati come previsto.

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