【发布时间】:2010-05-13 14:24:44
【问题描述】:
我正在开发一个基于文档的 Cocoa 应用程序。在启动时,用户会看到一个“欢迎面板”(类型为NSPanel),其中包含用于“创建新文档”和“打开现有文档”等常用操作的按钮。这些操作分别与第一响应者的newDocument: 和openDocument: 操作相关联,就像文件菜单中的匹配项一样。
一切都按预期工作......有三个警告:
- 创建或打开新文档时,欢迎面板不会关闭。
- 文档窗口在创建时没有焦点。
- 打开的文档窗口在窗口标题栏中没有显示打开的文件;同样,新的文档窗口不会像预期的那样使用“Untitled”、“Untitled 2”、“Untitled 3”等标题创建。 (我之所以提到这一点,不仅是因为它很烦人,还因为它可能会帮助您了解问题所在。)
通过将我的应用程序控制器设置为欢迎面板的代表,我已经部分解决了问题 1。单击“打开现有文档”按钮时,面板将退出其键状态(因为正在打开文件浏览器对话框),因此我可以在委托的 windowDidResignKey: 方法中关闭面板。但是,我不知道在创建新文档时如何关闭面板,因为在创建新文档时找不到发布的通知或调用的委托方法。最终,#2 仍然是一个问题,因为文档窗口在创建时没有获得焦点。
我只对NSDocument 进行了子类化——我根本没有使用自定义文档或窗口控制器。我还尝试将面板更改为NSWindow,认为NSWindow 的行为可能不同,但会出现相同的问题。
【问题讨论】:
-
其他人可能会回答这个问题,但如果您可以创建并发布一个示例应用程序来演示该问题,这将是(并且总是)有用的。
-
我愿意,但我认为代码本身并不相关。界面的相关部分是一个 nib(所以没有代码),应用程序利用 Cocoa 的文档框架来完成它的工作,所以应用程序本身的代码相对较少。
标签: cocoa nsdocument document-architecture