UIApplicationDelegate 与 NSApplicationDelegate、MainMenu.xib

Posted

技术标签:

【中文标题】UIApplicationDelegate 与 NSApplicationDelegate、MainMenu.xib【英文标题】:UIApplicationDelegate versus NSApplicationDelegate, MainMenu.xib 【发布时间】:2015-05-22 18:41:50 【问题描述】:

我正在将 ios 应用程序移植到 OS X。我曾考虑使用 Apple 示例代码“AnimatedTableView”作为起点,但惊讶地发现它没有 NSApplicationDelegate。在 iOS 上,我通常在 applicationDidFinishLaunching 中以编程方式创建对象,并试图弄清楚如何在 OS X 上执行此操作,除非我不应该这样做。

AnimatedTableView 的 MainMenu.xib 包含一个“ContentController”对象,该对象引用了它们的控制器类之一。看起来这个类的“wakeFromNib”方法是动作开始的地方。您添加到 MainMenu.xib 的任何对象在应用程序启动时自动实例化是否正确?那么,我可以在 MainMenu.xib 中放置一个主控制器类,然后从那里开始以编程方式创建其他对象吗?或者,为了坚持我的 iOS 模式,我可以将 MainMenu.xib 中的控制器对象替换为 NSApplicationDelegate 对象,并让它以编程方式创建主控制器对象?

正确吗?我尽量避免使用 IB,显然缺少一些基本的理解。

【问题讨论】:

【参考方案1】:

您添加到 MainMenu.xib 的任何对象在应用程序启动时自动实例化是否正确?

更正确的说法是,设置为使用 .xib 文件而不是情节提要的 Cocoa 应用程序将自动加载指定为应用程序 Info.plist 文件中主 nib 文件的 .xib 文件。但是是的,基于 .xib 的应用程序通常会设置为在启动时加载 MainMenu.xib。

那么,我可以在 MainMenu.xib 中放置一个主控制器类,然后从那里开始以编程方式创建其他对象吗?

当然,这是一种行之有效的方法。

或者,为了坚持我的 iOS 模式,我可以将 MainMenu.xib 中的控制器对象替换为 NSApplicationDelegate 对象,并让它以编程方式创建主控制器对象?

项目中应该已经有一个应用程序委托对象。更重要的是,主 .xib 文件中有一个应用程序委托代理,因此您可以将出口添加到应用程序委托并将它们连接到主 .xib 文件中的对象。如果您想在应用委托中创建“主控制器”对象,您当然可以这样做。

【讨论】:

这让我大吃一惊,Apple 的这个特定示例代码中没有应用程序委托。现在,我确实在 NSApplication FileOwner 上看到了未连接的委托链接,我可以将其附加到主 .xib 文件中的对象。我总是从一些示例代码开始,这些示例代码已经被连接起来并且永远不知道它来自哪里。我猜你在 OSX 上不需要应用程序委托。

以上是关于UIApplicationDelegate 与 NSApplicationDelegate、MainMenu.xib的主要内容,如果未能解决你的问题,请参考以下文章

XCode 更新到 6.3 后,“window”类型的可选性与协议“uiapplicationdelegate”所要求的不同

在越狱设备上使用后台程序时未调用 UIApplicationDelegate

扩展 UIApplicationDelegate 协议

什么是 Cordova 的 UIApplicationDelegate 等价物

如何在整个程序中使用 UIApplicationDelegate?

其他类中的 UIApplicationDelegate 函数