6

如何将一种格式的文件导出NSDocument为另NSDocument一种格式的另一种格式?

我想在我的基于文档的应用程序中实现典型的导出选项。我不确定应该将格式转换代码放在哪里,以及 Cocoa 已经提供了什么。

4

2 回答 2

7

获取字符串参数中的所有写入选项NSDocument以指定应写入的文件类型。因此,在您的dataOfType:error:orfileWrapperOfType:error:方法中,您应该为要支持的每种文件类型实现转换代码。

要开始导出操作,您可以使用saveToURL:ofType:forSaveOperation:completionHandler:具有所需类型的方法和NSSaveToOperation.

有关可以覆盖以支持加载和保存文档数据的方法的更多信息,请查看此编程指南

您可以从类方法writableTypes或实例方法中获取可用类型writableTypesForSaveOperation:,同样使用NSSaveToOperation.

您想要支持的文件类型需要在 Info.plist 文件中声明。

于 2013-01-20T16:48:28.363 回答
1

如果您的 NSDocument 子类支持就地自动保存,并且所有可写类型也是可读的(因为它们应该是可读的),我建议使用已经提供的类型转换工作流程,其中用户应该使用“复制”,然后使用“保存” .

在此工作流程中,当用户“复制”文档时,它会作为无标题文档写入/复制到临时文件(保存自动保存的文件)。当用户关闭文档窗口时,应用程序会建议她保存或删除文档。由于该文档还没有永久的 URL,一个 NSSavePanel 将出现一个附件视图,允许用户选择文档类型。

在这个解决方案中,Cocoa 已经提供了所有内容,您无需执行任何操作即可支持特殊的“导出”功能,因为用户可以使用“复制”后跟“保存”。您只需能够根据参数将文档保存为所有可写类型dataOfType:error:(如 Sven 所说)。fileWrapperOfType:error:typeName

这里的优点是用户只有在关闭文件时才需要选择 URL(并且选择不删除它) - 并且与基于文档的应用程序中的新工作流程兼容,其中“另存为”操作已被替换为“复制”后跟“保存”。

请注意,您还必须确保可以复制不可写文档的文档(您可以通过复制原始文件而不是使用来实现writeSafelyToURL:ofType:forSaveOperation:error:)。

于 2013-01-27T09:27:20.890 回答