Приложение, основанное на документах Какао: наблюдатель не всегда получает уведомление - PullRequest
1 голос
/ 26 апреля 2010

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

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

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

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

1 Ответ

1 голос
/ 26 апреля 2010

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

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

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

...