【问题标题】:Loading main window at applicationDidFinishLaunching in Cocoa Application在 Cocoa 应用程序中的 applicationDidFinishLaunching 加载主窗口
【发布时间】:2012-01-03 05:12:40
【问题描述】:

在 Cooca 应用程序中,MainMenu.xib 在标准模板中为您设置。该笔尖也已使用应用程序委托进行设置。在 info.plist 中,“Main nib file bas ename”键将 nib 文件设置为在启动时加载。

如果可能的话,我希望应用程序在没有 nib 的情况下启动,我想在应用程序的主委托中的 applicationDidFinishLaunching 处加载 MainMenu.xib。

有可能吗?

【问题讨论】:

  • 应用程序的委托是 inside NIB,因此您所描述的内容是不可能的。你想达到什么目的?也许还有其他方法。

标签: macos cocoa


【解决方案1】:

首先,在支持文件 -> main.m 中注释掉 NSApplicationMain。 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 的 File's Owner 自定义类应该从应用程序切换到 MYCustomWindowController。

如果 MainMenu.xib 有一个像这个例子一样的窗口,它的“引用出口”需要连接到 File's Owner->window。

如果您从单个视图应用程序开始,请从 MainMenu.xib 中删除 App Delegate 对象 - 否则 xib 将创建您的应用程序委托的第二个实例。如果您引用 MYAppDelegate.managedObjectContext 之类的东西,这可能会很糟糕。如果需要绑定应用委托,可以通过delegate.managedObjectContext的键路径绑定到Application。

我为什么要这样做?因为有时我的应用程序会使用 GUI 启动,有时则不会。

【讨论】:

    【解决方案2】:

    这是可能的,但很少值得 IMO 麻烦。如果您已经有一个捆绑包,则包含一个小 nib 文件(仅菜单;无窗口)的成本很低。如果您想在启动后从单独的 nib 文件加载 UI 的其余部分,那很好。但我建议允许 MainMenu.nib 加载并提供主菜单。 (你不清楚你想用你的方法解决什么问题。)

    也就是说,Lap Cat 在这方面写了一系列文章,名为“不带笔尖工作”,值得一读。你会想要最后一篇文章The Empire Strikes Back,他在其中包含指向他的 nibles 项目的链接。他的技术在 10.7 中仍然有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多