Cocoa 覆盖NSSaveDialog中可能的导出格式列表

Cocoa 覆盖NSSaveDialog中可能的导出格式列表,cocoa,nssavepanel,Cocoa,Nssavepanel,我有一个可以加载第三方代码的应用程序。第三方代码可以做的功能之一是添加应用程序可以导出到的格式。我正在使用saveDocumentTo:作为实现导出的手段 我知道我可以通过覆盖我的文档的writableTypesForSaveOperation:来自定义要保存的可用文件类型的菜单,但不起作用的是,在“保存”对话框中,当从菜单中选择时,没有向文件名添加适当的文件扩展名 我尝试重写fileNameExtensionForType:saveOperation:,但它甚至没有被调用 如何使“保存”对话框

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

我知道我可以通过覆盖我的文档的
writableTypesForSaveOperation:
来自定义要保存的可用文件类型的菜单,但不起作用的是,在“保存”对话框中,当从菜单中选择时,没有向文件名添加适当的文件扩展名

我尝试重写
fileNameExtensionForType:saveOperation:
,但它甚至没有被调用


如何使“保存”对话框找到正确的文件扩展名(前提是在编译时不知道该文件扩展名)?

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

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

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

讨论

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

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

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


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

如果您创建了专用的附件视图,如何设置扩展名?@JakubHampl-wow,查看了实现,它并不像我写的那么简单-感谢您的澄清。我更新了答案,描述了我所做的事情——还从文档中删除了一些力学知识。