基于文档的Mac应用程序中的主窗口在哪里?如果从Xcode创建一个新项目,MainMenu.xib中没有窗口。 Document.xib中只有一个窗口对象用于文档窗口。我想在界面构建器中设计主窗口,但我不明白它的创建位置。
修改
我想我在Xcode中遇到了一个错误。使用随机名称创建基于文档的应用程序按预期工作。
但是,如果我创建一个基于文档的应用程序,其名称为先前的项目名称,我会看到首先出现的非文档窗口以及控制台中的此错误。
Unknown class 'AppDelegate', using 'NSObject' instead. Encountered in Interface Builder file at path /Users/[COMPUTER]/Library/Developer/Xcode/DerivedData/[PROJECT]-gohsjlddlopenfapdikaqibmvvqs/Build/Products/Debug/[PROJECT]/Contents/Resources/en.lproj/MainMenu.nib.
答案 0 :(得分:4)
基于文档的应用程序没有“主”窗口 - 根据定义,基于文档的应用程序基于涉及每个文档的一个窗口的UI。如果在Xcode中创建新的应用程序项目时,您想要一个以UI为中心的应用程序(如iTunes或系统偏好设置),请在选择应用程序模板后取消选中“创建基于文档的应用程序”。
如果要创建使用基于文档的工作流但还具有非文档特定窗口的应用程序,则可以为这些窗口创建单独的nib,并实现逻辑以在文档类之外的某个位置显示和控制它们。 (例如,您可以为首选项窗口创建一个NSWindowController
子类,并为该窗口的用户界面提供附带的nib,并从应用程序委托中实现的菜单命令中实例化/显示该窗口。)
答案 1 :(得分:2)
基本的可可文档架构假定应用程序每个文档有一个窗口,主菜单笔尖由应用程序委托拥有。
它不会阻止您为任何nib或控制器创建子类或添加其他窗口。
如果你想要的是一个主窗口和文档窗口,这是一个常见的范例,但不是在提供的模板中。
最简单的方法是在主菜单笔尖上添加一个窗口。那么你可能希望它有一种方法来引用你的所有文档窗口。 Mac上的邮件是一个很好的例子,虽然它也允许多个主窗口。
您可能需要一个自定义的NSWindowController子类来正确执行此操作。
但您也可以添加一个NSObject子类作为您的app委托,并模仿非基于文档的应用程序项目模板中的委托配置。
您需要完成几个步骤才能执行此操作。
创建一个NSObject子类。
确保它声明了协议。
在MainMenu.xib中,从库中添加一个NSObject(蓝盒子外观)。
将其类设置为新的NSObject子类。
单击xib文件中的NSApplication占位符图标,然后在右侧的检查器中,将delegate属性连接到app delegate对象。
现在选择您的app delegate对象。
将其窗口属性连接到xib中的窗口。
如果没有,并且可能没有,那么您需要在app委托类接口中声明它。 (这与为任何按钮或其他对象添加属性相同,但您需要更改它
@property (unsafe_unretained) IBOutlet NSWindow *window;
至
@property (strong) IBOutlet NSWindow *window;