2012-01-03 67 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。

相关问题