macos - 在 Cocoa App 中启用打开菜单

标签 macos cocoa openfiledialog

我有一个关于为 OSX Cocoa 应用程序启用“文件打开”菜单项的问题。

我在 AppDelegate 中创建了一个 openDocument 方法,并将菜单项连接到该方法,并验证了当我单击文件打开菜单时该方法被调用。

 - (IBAction)openDocument:(id)sender

我的问题是,这真的是实现文件打开菜单功能的方法吗?我一半期望 Cocoa 能够自动显示打开的面板对话框,而不是我必须在 openDocument 方法中编写代码来完成它。难道不是这样吗?

最佳答案

NSDocumentControlleropenDocument: 的默认实现。
对于非基于文档的应用程序,您必须提供自定义实现(就像您所做的那样)。

原因可能是,对于基于文档的应用程序,文档 Controller 可以使用打开的面板返回的 URL 内容创建一个 NSDocument 实例。
对于其他应用程序,在用户选择文件后应用程序应该执行的操作不太明显。因此,您必须通过代码指定该行为。

如果您的应用适合基于文档的模型,您可以查看 Document-Based App Programming Guide 。当采用 Cocoa 文档架构时,您可以免费获得许多默认行为。

当您在“新建项目”向导中选中“创建基于文档的应用程序”复选框时,Xcode 将创建所有必需的类。

关于macos - 在 Cocoa App 中启用打开菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522813/

相关文章:

macos - CLLocationManager 可以在 MAC 中与外部 GPS 配合使用吗

objective-c - 代表和控制者

java - 如何在SWT中选择用于保存的文件夹?

.net - OpenFileDialog:FileNames 和 SafeFileNames 之间的区别

c# - 如何从 OpenFileDialog 获取文件扩展名?

macos - 混合版本控制与 Mac OS X Lion 版本

objective-c - 在进行消息转发时避免编译器警告

node.js - MacOS/Linux 和 Windows 上的 node_modules 文件夹的访问权限

ios - 使用 GCD 复制文件的最有效方法?

macos - NSView 子类中未调用 cancelOperation