我正在为 Mac OSX 编写一个单窗口、非基于文档的应用程序。我来自一个 iOS 项目,我们避免像瘟疫一样避免使用 Interface Builder。我强迫自己将它用于 Mac 项目只是为了体验。
我的程序菜单及其主窗口位于两个不同的 nib 中。该窗口包含一个工具栏。当然,许多工具栏和菜单项都代表相同的功能,所以我想通过相同的代码对它们进行路由。最初,我将菜单/工具栏的所有处理程序放在我的应用程序控制器中,并使用 Interface Builder 将它们连接到菜单/工具栏。然后我意识到很多操作会影响窗口及其内容,而不是整个程序,所以我认为将这些方法放在主窗口控制器中更合适。
为了支持这一点,我在窗口 nib 中添加了一个 NSObject,将其类更改为我的窗口控制器类,并将它们连接起来。
当然,我现在看到的是,我的应用程序控制器在创建我的唯一窗口时创建了窗口控制器的一个实例,并且菜单的 nib 在它构建界面时创建了窗口控制器的另一个实例笔尖。这可能会或可能不会被证明是有问题的,但这似乎是一种浪费。似乎每个人都应该与我在 applicationDidFinishLaunching 中创建的唯一窗口控制器交谈。
所以问题 1 是“在从 nib 构建用户界面时,如何告诉我的程序使用现有的窗口控制器?”
如果问题 1 的答案是“你不知道”,那么我正在寻找一个建议的组织模式来遵循。我是否将所有菜单/工具栏处理程序放在应用程序控制器中并从那里路由?还是有其他一些与 Cocoa 的时代精神一致的常见方式?