UIApplicationDelegate 与 NSApplicationDelegate,MainMenu.xib

UIApplicationDelegate versus NSApplicationDelegate, MainMenu.xib

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

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

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

Is it correct that any objects you add to MainMenu.xib are automatically instantiated on application launch?

更正确的说法是,设置为使用 .xib 文件而不是故事板的 Cocoa 应用程序将自动加载在应用程序 [=22] 中指定为主 nib 文件的 .xib 文件=] 文件。但是 ,基于 .xib 的应用程序通常会设置为在启动时加载 MainMenu.xib。

So, I could just put a master controller class in the MainMenu.xib and begin creating other objects programatically from there?

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

Or, to stick with my iOS pattern, I could replace the controller object in the MainMenu.xib with an NSApplicationDelegate object and have it programmatically create the master controller object?

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