我有一个包类型的文档——即它实际上是一个文件夹,但它使用NSFileWrapper
并符合com.apple.package
显示为一个文件——我想通过电子邮件共享它。我已经制作了一个MFMailComposeViewController
,我正在尝试找出给 . 的第一个参数提供什么addAttachmentData:mimeType:fileName:
。
该软件包包含一个图像文件和一个 plist,尽管将来可能会改变。
如何将包转换为数据?这是正确的做法吗?
我有一个包类型的文档——即它实际上是一个文件夹,但它使用NSFileWrapper
并符合com.apple.package
显示为一个文件——我想通过电子邮件共享它。我已经制作了一个MFMailComposeViewController
,我正在尝试找出给 . 的第一个参数提供什么addAttachmentData:mimeType:fileName:
。
该软件包包含一个图像文件和一个 plist,尽管将来可能会改变。
如何将包转换为数据?这是正确的做法吗?
正如你所说,一个包实际上是一个文件夹。它仅在 OSX 操作系统上被解释为一个包。
因此,邮件协议不能将其解释为一个包/单个文件,而只能看到一个标准文件夹。
通过电子邮件发送此文件的唯一方法是将文件压缩成一个文件。例如,您可以通过创建包的 ZIP 存档或 tar.gz 文件来做到这一点。
有多种解决方案可以从 Cocoa 中的代码创建 ZIP 存档。您可以直接使用 libz 库和 C 代码,或使用一些第三方库(已经有通用代码,并使用 Cocoa 方法帮助您更轻松地完成此操作),如ZipArchive或其他。
我的文件不大,所以 ZIP 有点大材小用,我也在尽量避免使用第三方代码。所以我想出了一种不同的方法来在一个电子邮件附件中附加多个文件。
首先,我已经有一个 NSFileWrapper 对象,其中包含附件中我想要的所有文件。关键是使用 NSFileWrapper 的 serializedRepresentation 方法来获取 NSData 对象以用于电子邮件附件。我正在为 mimeType 使用“应用程序/八位字节流”。当我重新打开附件时,我使用 NSFileWrapper 的 initWithSerializedRepresentation: 方法来获取原始的 NSFileWrapper。
这对我有用,因为附件只会由我的应用程序使用和打开。显然,如果您需要对 App 之外的附件做一些事情,这将不起作用。在这种情况下,ZIP 似乎是合乎逻辑的选择。