Приложение, основанное на какаоском документе: уведомление не всегда получено наблюдателем

StackOverflow https://stackoverflow.com/questions/2716062

Вопрос

Я надеюсь, что кто-то может помочь с моей проблемой уведомления. У меня есть уведомление, которое может быть настроено правильно, но он не доставляется, как и ожидалось. Я разрабатываю приложение на основе документов. Учебный класс делегата / документа Сообщает уведомление, когда он читает из сохраненного файла:

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

Регистрация говорит мне, что эта линия достигнута всякий раз, когда я открываю сохраненный документ.

В классе DrawView у меня есть наблюдатели для уведомления WindowOpen и файл BSPLINEPOLY открытия:

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

Поведение нечетное. Когда я сохраняю и закрою главное окно и открываю его, я получаю сообщение «Открытое окно», но не сообщение «SavedBline называется». Если я оставляю главное окно открыть и откройте ранее сохраненный сеанс, я получаю сообщение «Открытое окно» и сообщение «SavedBline под названием».

Я искал онлайн-обсуждение и документацию Apple Devcenter, но я не видел эту проблему.

Это было полезно?

Решение

NSNotification Доставка работает, как и ожидалось (по крайней мере, когда нет NSNotificationQueueучаствуют). Они доставляются немедленно, а не на других потоках, без задержки, а не отфильтрованы.

Я бы сказал, что некоторые из ваших объектов еще не создали, когда уведомления о пожарах или выселяете порядок выполнения каким-либо другим способом: вы говорите, что вы публикуете уведомление при чтении из сохраненного файла, но тогда вы отсутствуете Уведомление при сохранении и закрытии окна.

Чтобы помочь отладки, я предлагаю вам настроить наблюдатель уведомления в вашем делегате приложения, который просто регистрирует все уведомления. Тогда вы уверены, что все уведомления доставляются, как ожидалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top