我有一个可以加载第三方代码的应用程序。第三方代码可以执行的功能之一是添加应用程序可以导出的格式。我在用 saveDocumentTo: 作为实施出口的手段。

我知道我可以自定义可用文件类型的菜单以通过覆盖进行保存 writableTypesForSaveOperation: 对于我的文档,但不起作用的是,在保存对话框中,从菜单中选择时,不会将适当的文件扩展名添加到文件名中。

我尝试覆盖 fileNameExtensionForType:saveOperation: 但这甚至没有被调用。

如何使“保存”对话框找到正确的文件扩展名(假设在编译时未知)?

有帮助吗?

解决方案

我已经在“保存面板”的自定义导出附件视图中完成了此操作。自定义导出附件视图仅更改 NSSavePanel每当用户更改要导出的格式时允许的文件类型。

如果要设置扩展名,请传递一个数组,其中一个元素包含该扩展名。

该文档有一些重要的细节 -[NSSavePanel setAllowedFileTypes:]在这方面的行为,用于支持更复杂的情况:

讨论

文件类型可以是通用文件扩展名或 UTI。nil 值表示可以使用任何文件类型。默认值为 nil。

如果用户未指定扩展名,则 allowedFileTypes 中的第一项将用作保存面板的扩展名。如果用户指定的类型不在数组中,并且 allowedOtherFileTypes 为 YES,则在提示保存时将显示另一个对话框。

NSOpenPanel:在低于 v10.6 的 Mac OS X 版本中,此属性被忽略。对于链接到 v10.6 及更高版本的应用程序,此属性确定应在打开的面板中启用哪些文件。使用已弃用的方法来显示打开的面板(采用以下类型的方法:参数)将覆盖该值,并且不应使用。允许的文件类型可以在面板运行时更改(例如,从附件视图)。文件类型可以是通用文件扩展名或 UTI。这也称为“启用文件类型”。零值表示应启用所有文件。

在某些情况下,您可能还会看到专用的导出对话框,如果您有多种不同的格式,这可以降低导出的复杂性。和以前一样,您只需更新允许的文件类型即可支持此功能(在这种情况下不一定是动态的)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top