2010-05-23 3 views
2

У меня есть класс в моем приложении, который обрабатывает все элементы управления и все функции и переменные хранятся в нем. Как добавить функцию, которая обрабатывает запуск приложения?Выполнить что-то при запуске приложения?

В принципе, мне нужно обрабатывать «applicationDidFinishLaunching» в моем классе, а также в делете приложения.

Как это сделать?

+0

И в чем проблема с отправкой его сообщения или инициализации его в '-applicationDidFinishLaunching'? –

+0

Поскольку все функции и код приложения находятся в другом файле. –

+0

Сложно сказать, как это следует обрабатывать, не зная, по крайней мере, основную структуру/семантику класса, о котором вы говорите. Как вы обычно обращаетесь к нему? –

ответ

5

NSApplication отправляет уведомление NSApplicationDidFinishLaunchingNotification, так что вы просто должны быть в состоянии зарегистрировать, что в вашем классе:

- (void)awakeFromNib 
{ 
    NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self 
      selector:@selector(appDidLaunch:) 
       name:NSApplicationDidFinishLaunchingNotification 
      object:nil]; 
} 

- (void)appDidLaunch:(NSNotification*)notification 
{ 
    NSLog(@"Blast off!"); 
} 

Там есть общая картина здесь, в том, что какао-классы, которые имеют методы делегата с помощью метода подписи, передает один параметр уведомления, такой как метод делегирования ‑(void)applicationDidFinishLaunching:(NSNotification*)notificationNSApplication, также отправляет уведомление при вызове метода делегата.

Например, NSWindow имеет много методов делегата с такого рода подписи, такие как:

- (void)windowDidResize:(NSNotification *)notification 

Если посмотреть на the docs для этого метода, вы увидите, что уведомление, которое передается этот метод делегирования - NSWindowDidResizeNotification. Затем вы можете найти более подробную информацию об этом уведомлении в notifications section документов NSWindow.

Этот тип метода делегата часто используется, когда существует вероятность того, что более чем один объект будет интересоваться информацией делегата.

+0

Это не работает, если вы не добавили наблюдателя в applicationWillFinishLaunching: method. В другом месте слишком поздно. – erkanyildiz

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