在Cooca应用程序中,MainMenu.xib是在标准模板中为您设置的。此笔尖也已与应用程序委托一起设置。在info.plist中,键"主nib文件bas ename"将nib文件设置为在启动时加载。
我希望应用程序在没有nib的情况下启动,我想在applicationDidFinishLaunching中加载应用程序主代理中的MainMenu.xib。
有可能吗?
答案 0 :(得分: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;
}
然后,在app delegate的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的File's Owner自定义类应该从应用程序切换到MYCustomWindowController。
如果MainMenu.xib有一个如本例所示的窗口,那么它的“引用插座”需要连接到File的Owner->窗口。
如果您从单个视图应用程序开始,请从MainMenu.xib中删除App Delegate对象 - 否则xib将创建应用程序委托的第二个实例。如果您引用类似MYAppDelegate.managedObjectContext的内容,这可能会很糟糕。如果需要绑定到应用程序委托,则可以使用delegate.managedObjectContext的键路径绑定到Application。
为什么我这样做?因为有时候我的应用程序会启动一个GUI,有时却没有。
答案 1 :(得分:1)
这是可能的,但很少值得IMO的麻烦。如果你已经有一个捆绑包,那么包含一个小的nib文件(仅菜单;没有窗口)的成本很低。如果要在启动后从单独的nib文件加载其余的UI,那很好。但我建议允许MainMenu.nib加载并提供主菜单。 (你不清楚你试图用你的方法解决什么问题。)
那就是说,Lap Cat写了一系列关于这个名为“没有笔尖工作”的文章值得一读。你会想要上一篇文章The Empire Strikes Back,其中包含了他的nibless项目的链接。他的技术仍然适用于10.7。