2010-05-23 128 views
2

我在我的應用程序中有一個類來處理所有的控件,並且所有的函數和變量都存儲在它中。我如何添加一個處理應用程序啓動的函數?在應用程序啓動時執行某些操作?

所以基本上我需要在我的課以及應用程序委託中處理'applicationDidFinishLaunching'。

我該怎麼做?

+0

在'-applicationDidFinishLaunching'中發送消息或初始化消息時出現了什麼問題? – 2010-05-23 12:20:59

+0

因爲所有的應用程序功能和代碼都位於不同的文件中。 – 2010-05-23 12:36:31

+0

很難說如何在不知道你所指的類的基本結構/語義的情況下如何處理它。你通常如何訪問它? – 2010-05-23 12:51:11

回答

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

有一個通用的模式在這裏,有一個方法簽名的委託方法可可類,傳遞一個單獨的通知參數,例如NSApplication‑(void)applicationDidFinishLaunching:(NSNotification*)notification委託方法,也會在委託方法被調用時發佈通知。

例如,NSWindow有很多的委託方法具有這種特徵的,如:

- (void)windowDidResize:(NSNotification *)notification 

如果你看一下the docs這種方法,你會看到,傳遞給通知此代表方法是NSWindowDidResizeNotification。然後,您可以在NSWindow文檔的notifications section文檔中找到有關此通知的更多詳細信息。

這種類型的委託方法通常用於有多個對象可能對委託信息感興趣的情況。

+0

除非您在applicationWillFinishLaunching:方法中添加觀察者,否則這不起作用。其他地方爲時已晚。 – erkanyildiz 2014-02-21 10:56:26

相關問題