我有一个包类型的文档-即它确实是一个文件夹,但它使用 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使用'application/octet-stream'。当我回到打开附件时,我使用NSFileWrapper的initWithSerializedRepresentation:获取原始NSFileWrapper的方法。

这对我有效,因为附加的文件只会被我的应用程序使用和打开。显然,如果您需要在应用程序之外对附件执行某些操作,这将不起作用。在这种情况下,ZIP似乎是合乎逻辑的选择。

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