2010-04-27 1 views
1

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

// 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"); 
} 

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

ответ

2

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

// 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"); 
} 

Хотя, после прочтения here и here, windowDidExpose не может быть вашим лучшим выбором. Я бы порекомендовал вместо этого использовать метод делегата windowDidBecomeKey. Он публикуется всякий раз, когда ваше окно получает «фокус» (начинает отвечать на ввод пользователя), что может быть подходящим временем для отображения второго окна.

Update: (в ответ на комментарии)

документации компании Apple (цитируется ниже) указывает на то, что NSWindowDidExposeNotification действительна только для nonretained окон, которые, в соответствии с должностями, которые я связывал выше, являются довольно редко ,

NSWindowDidExposeNotification

Добавлено всякий раз, когда часть объекта в nonretained NSWindow подвергается воздействию, будь предписывалось перед другими окнами или другими окнами удаляется из перед ним.

Объект уведомления является объектом NSWindow, который был выставлен. Словарь userInfo содержит ... прямоугольник, который был открыт.

На более высоком уровне, NSNotification объекты просто пакеты данных, которые получают ходили между классами какао и NSNotificationCenter объектами. NSNotificationCenter Объекты - это контроллеры, которые управляют этими пакетами данных и отправляют их наблюдателям по мере необходимости. Обычно нет необходимости обманывать уведомления напрямую. Вы можете просто использовать KVC/KVO или предопределенные делегаты в своих классах, а Cocoa обрабатывает все грязные детали за кулисами.

См. Notification Programming Topics и Key Value Coding Programming Guide, если вы хотите узнать больше.

+0

Ага, это хорошо работает, спасибо, я воспользуюсь этим. Но потом я думаю, что не понимаю, что такое NSWindowDidExposeNotification. – Jeena

+0

Мой ответ был слишком длинным для комментария, поэтому я разместил его в своем ответе. Надеюсь, вам будет достаточно информации, чтобы вы начали! ':)' –

+0

Спасибо, еще один вопрос;). Что они означают, что я «неназванный NSWindow»? Я не там, где удержание счета равно 0 или не так ли? – Jeena

Смежные вопросы