【问题标题】:Cocoa app without a MainMenu.xib没有 MainMenu.xib 的 Cocoa 应用程序
【发布时间】:2011-10-20 05:25:55
【问题描述】:

对于 iOS(Cocoa Touch),可以转到您的 main.m 并将 UIApplicationMain(int argc, char *argv[], nil, nil) 中的第四个参数替换为您的应用程序委托的类名,然后根据需要构建视图。但是,Cocoa (Mac) 项目在 main.m 中有以下内容:

    return NSApplicationMain(argc, (const char **)argv);

所以问题基本上是:如何在没有 MainMenu.xib 的情况下将应用的委托交给 Cocoa 应用?

【问题讨论】:

  • 这实际上不是一个好主意,因为 MainMenu.xib 包含菜单栏。因此,任何寻找解决方案的人都不要寻找它,除非您想自己重新创建和填充菜单栏的内容。为什么 MainMenu.xib 被称为 MainMenu.xib :)

标签: cocoa delegates xib


【解决方案1】:

子类NSApplication,将您的子类名称声明为Xcode 中的Application Class(或类似)属性。在您的子类中,您可能会覆盖一些在应用程序初始化时调用的函数,可能是-finishLaunching

【讨论】:

  • 我能够成功地继承 NSApplication 并覆盖它的 init 以指向委托(委托随后在 applicationDidFinishLaunching 中用我的 NSLog 响应)。但是,即使从属性列表中删除了主 nib 文件条目,应用程序仍会选择 MainMenu.xib。如果您删除 MainMenu.xib 本身,则应用程序在启动时崩溃,而调试器中没有任何重要内容
【解决方案2】:

您可以使用NSApplication 实例的setDelegate 方法。这是一个示例:

AppDelegate * delegate = [[AppDelegate alloc] init];
[[NSApplication sharedApplication] setDelegate:delegate];
[NSApp run];

返回值可以使用EXIT_SUCCESS

【讨论】:

  • 这行得通,谢谢。你知道吗,我刚刚意识到 MainMenu.xib 有菜单栏,重新创建它会很痛苦,所以我会坚持使用主 xib。
  • 不客气。我认为最好写几行而不是编辑菜单)
  • 但是返回值是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多