UIApplicationDelegate与NSApplicationDelegate,MainMenu.xib

时间:2015-05-22 18:41:50

标签: ios objective-c macos cocoa cocoa-design-patterns

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

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

这是对的吗?我试图尽可能地避免IB,显然我缺少一些基本的理解。

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

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

  

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

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