Как использовать NSWindowDidExposeNotification

Я пытаюсь обновить другого окна, когда тот становится видимым. Таким образом, я нашел NSWindowDidExposeNotification и попытался работать с ним, таким образом, я записал в своем awakeFromNib:

// MyClass.m
- (void)awakeFromNib {
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self
           selector:@selector(mentionsWindowDidExpose:)
               name:NSWindowDidExposeNotification
             object:nil];
}

и реализованный метод

// MyClass.h
- (void)mentionsWindowDidExpose:(id)sender;

// MyClass.m
- (void)mentionsWindowDidExpose:(id)sender {
    NSLog(@"test");
}

Но это никогда не называют, который нечетен. Что я делаю неправильно здесь?

1
задан Jeena 27 April 2010 в 17:42
поделиться

1 ответ

В общем, вы должны настроить свой контроллер в качестве делегата окна, чтобы получать эти уведомления, например:

// 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 или предопределенные делегаты в своих классах, а Какао обрабатывает все грязные детали за кулисами.

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

2
ответ дан 3 September 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: