Вообще говоря, вы должны настроить свой контроллер как делегат окна для получения этих уведомлений, например:
// MyClass.m
- (void)awakeFromNib {
// note: this step can also be done in IB by dragging a connection
// from the window's "delegate" property to your `MyClass` object
[window setDelegate:self];
}
- (void)windowDidExpose:(NSNotification *)notification {
NSLog(@"test");
}
Хотя после прочтения здесь и здесь , windowDidExpose
может оказаться не лучшим выбором. Я бы порекомендовал попробовать метод делегата windowDidBecomeKey . Это сообщение публикуется всякий раз, когда ваше окно получает «фокус» (начинает реагировать на ввод пользователя), что может быть подходящим временем для отображения вашего второго окна.
Обновление: (в ответ на комментарии)
Документация Apple (цитируется ниже) указывает, что NSWindowDidExposeNotification
действителен только для не сохраненных окон, что, согласно сообщениям, которые я привел выше, весьма необычно.
NSWindowDidExposeNotification
Размещается всякий раз, когда открывается часть несохраненного объекта NSWindow, будь то заказ перед другими окнами или удаление других окон перед ним.
Объект уведомления - это объект NSWindow, который был выставлен. Словарь userInfo содержит ... выставленный прямоугольник.
На более высоком уровне NSNotification
объекты - это просто пакеты данных, которые передаются между классами Какао и NSNotificationCenter
объектами. NSNotificationCenter
объекты - это контроллеры, которые управляют этими пакетами данных и отправляют их наблюдателям по мере необходимости. Обычно нет необходимости перехватывать уведомления напрямую . Вы можете просто использовать KVC / KVO или предопределенные делегаты в ваших классах, и Cocoa обрабатывает все грязные детали за кулисами.
См. Темы программирования уведомлений и Руководство по программированию кодирования значения ключа , если вы хотите узнать больше.