2012-01-03 34 views
2

在Cooca應用程序中,MainMenu.xib是在標準模板中爲您設置的。這個筆尖也已經與應用程序委託一起設置。在info.plist中,鍵「Main nib file bas ename」設置nib文件在啓動時加載。在applicationDidFinish在可可應用程序中加載主窗口

我想在沒有筆尖的情況下啓動應用程序,我想要在應用程序的主代表的applicationDidFinishLaunching中加載MainMenu.xib。

可能嗎?

+1

應用程序的委託*在NIB中,所以你所描述的是不可能的。你想達到什麼目的?也許還有另一種方式。 – 2012-01-03 06:13:49

回答

3

首先,註釋掉NSApplicationMain支持文件 - > main.m. NSApplicationMain()加載Info.plist中提到的主要筆尖,所以請跳過它。相反,安裝應用程序,並委託並運行應用程序:

int main(int argc, const char * argv[]) 
{ 
    //return NSApplicationMain(argc, argv); 

    @autoreleasepool { 
     NSApplication * application = [NSApplication sharedApplication]; 
     MYAppDelegate* appDelegate = [[MYAppDelegate alloc] init]; 

     [application setDelegate:appDelegate]; 
     [application run]; 
    } 

    return EXIT_SUCCESS; 
} 

然後,在應用程序委託的applicationDidFinishLaunching:函數,調用類似的東西則CreateMainWindow:

- (void)createMainWindow 
{ 
    self.wincon = [[MYCustomWindowController alloc] initWithWindowNibName:@"MainMenu"]; 
    self.window = self.wincon.window; // window property in appdelegate created for single-view app 
    // Also had to connect About: to application's orderFrontStandardAboutPanel 
} 

MainMenu.xib的文件所有者自定義類應從應用程序切換到MYCustomWindowController。

如果MainMenu.xib有一個如本例所示的窗口,那麼它的「引用outlet」需要連接到File's Owner->窗口。

如果您從單一視圖應用程序開始,請從MainMenu.xib刪除App Delegate對象 - 否則xib將創建您的應用程序委託的第二個實例。如果您引用了像MYAppDelegate.managedObjectContext之類的東西,這可能會很糟糕。如果您需要綁定到應用程序委託,則可以使用delegate.managedObjectContext的鍵路徑綁定到應用程序。

我爲什麼要這樣做?因爲有時我的應用程序會啓動GUI,有時卻不會。

1

這是可能的,但很少值得麻煩國際海事組織。如果你已經有了一個包,那麼在包含一個小的nib文件(僅限菜單;沒有窗口)方面花費很少。如果你想在啓動後從一個單獨的nib文件加載你的用戶界面的其餘部分,那很好。但我建議讓MainMenu.nib加載並提供主菜單。 (你不清楚你想用你的方法解決什麼問題。)

也就是說,Lap Cat寫了一系列關於這個名爲「工作沒有筆尖」的文章,值得一讀。你會想要最後一篇文章The Empire Strikes Back他包含他的nibless項目的鏈接。他的技術仍然在10.7。

相關問題