如何将一种格式的文件导出NSDocument
为另NSDocument
一种格式的另一种格式?
我想在我的基于文档的应用程序中实现典型的导出选项。我不确定应该将格式转换代码放在哪里,以及 Cocoa 已经提供了什么。
如何将一种格式的文件导出NSDocument
为另NSDocument
一种格式的另一种格式?
我想在我的基于文档的应用程序中实现典型的导出选项。我不确定应该将格式转换代码放在哪里,以及 Cocoa 已经提供了什么。
获取字符串参数中的所有写入选项NSDocument
以指定应写入的文件类型。因此,在您的dataOfType:error:
orfileWrapperOfType:error:
方法中,您应该为要支持的每种文件类型实现转换代码。
要开始导出操作,您可以使用saveToURL:ofType:forSaveOperation:completionHandler:
具有所需类型的方法和NSSaveToOperation
.
有关可以覆盖以支持加载和保存文档数据的方法的更多信息,请查看此编程指南。
您可以从类方法writableTypes
或实例方法中获取可用类型writableTypesForSaveOperation:
,同样使用NSSaveToOperation
.
您想要支持的文件类型需要在 Info.plist 文件中声明。
如果您的 NSDocument 子类支持就地自动保存,并且所有可写类型也是可读的(因为它们应该是可读的),我建议使用已经提供的类型转换工作流程,其中用户应该使用“复制”,然后使用“保存” .
在此工作流程中,当用户“复制”文档时,它会作为无标题文档写入/复制到临时文件(保存自动保存的文件)。当用户关闭文档窗口时,应用程序会建议她保存或删除文档。由于该文档还没有永久的 URL,一个 NSSavePanel 将出现一个附件视图,允许用户选择文档类型。
在这个解决方案中,Cocoa 已经提供了所有内容,您无需执行任何操作即可支持特殊的“导出”功能,因为用户可以使用“复制”后跟“保存”。您只需能够根据参数将文档保存为所有可写类型dataOfType:error:
(如 Sven 所说)。fileWrapperOfType:error:
typeName
这里的优点是用户只有在关闭文件时才需要选择 URL(并且选择不删除它) - 并且与基于文档的应用程序中的新工作流程兼容,其中“另存为”操作已被替换为“复制”后跟“保存”。
请注意,您还必须确保可以复制不可写文档的文档(您可以通过复制原始文件而不是使用来实现writeSafelyToURL:ofType:forSaveOperation:error:
)。