Делегат NSApplication и панели настроек

Кажется, я не могу управлять делегатом NSApp из панели «Системные настройки», что понятно. Есть ли другой способ, которым я могу уведомить свой объект, когда программа станет активной?


person Rich Catalano    schedule 28.11.2008    source источник


Ответы (2)


Большинство методов делегата в рамках Cocoa — это просто методы уведомления. Сюда входят application{Will,Did}{Become,Resign}Active:, которые являются методами уведомления для NSApplication{Will,Did}{Become,Resign}ActiveNotification. Уведомления находятся там же, где и методы делегата: документация NSApplication.

Итак, просто подпишитесь на эти уведомления на локальном NSNotificationCenter.

person Peter Hosey    schedule 28.11.2008
comment
Спасибо, работает как шарм. Я использую это уведомление в сочетании с FSEvents для обновления NSTableView. Согласно моей отладке, все работает именно так, как надо, пока я не вызову setDataSource в представлении. Вид просто не обновляется. Есть идеи, что происходит? - person Rich Catalano; 29.11.2008
comment
Никто. Вы должны опубликовать другой вопрос с более подробной информацией. - person Peter Hosey; 29.11.2008

NSPreferencePane предоставляет вам несколько методов, которые вы можете переопределить, чтобы реагировать на изменения. В частности, mainViewDidLoad: дает вам возможность выполнить инициализацию, когда ваша панель настроек становится активной в первый раз.

Если вы на самом деле имели в виду, что хотите отслеживать, когда окно «Системные настройки» становится основным или ключевым, вы можете подписаться на уведомления NSWindow об этих событиях.

//  These messages get sent to the a preference panel just before and
//  just after it becomes the currently selected preference panel.
- (void) willSelect;
- (void) didSelect;

//  The willUnselect message gets sent to the currently selected preference panel
//  just before and just after it gets swapped out for another preference panel
- (void) willUnselect;
- (void) didUnselect;
person Marc Charbonneau    schedule 28.11.2008