我有一个包类型文档 - 即它实际上是一个文件夹,但它使用NSFileWrapper
并符合com.apple.package
以显示为文件 - 我想通过电子邮件分享。我已经制作了一个MFMailComposeViewController
,我正在尝试找出对addAttachmentData:mimeType:fileName:
的第一个参数给出的内容。
该软件包包含一个图像文件和一个plist,但将来可能会发生变化。
如何将包转换为数据?这是正确的做法吗?
答案 0 :(得分:2)
正如你所说,包实际上是一个文件夹。它仅在OSX操作系统上被解释为一个包。
因此,邮件协议无法将其解释为包/单个文件,只能看到标准文件夹。
通过电子邮件发送此文件的唯一方法是将文件压缩为单个文件。您可以通过创建包的ZIP存档或tar.gz文件来完成此操作。
有多种解决方案可以从Cocoa中的代码创建ZIP存档。您可以直接使用libz库和C代码,或者使用一些第三方库(已经有它的通用代码,并帮助您更轻松地使用Cocoa方法),如ZipArchive或其他。
答案 1 :(得分:1)
我的文件不大,所以ZIP太过分了,我也试图避免使用第三方代码。所以我提出了一种不同的方法来在一个电子邮件附件中附加多个文件。
首先,我已经有一个NSFileWrapper对象,其中包含我在附件中想要的所有文件。关键是使用NSFileWrapper的serializedRepresentation方法获取用于电子邮件附件的NSData对象。我正在使用' application / octet-stream'对于mimeType。当我回到打开附件时,我使用NSFileWrapper的initWithSerializedRepresentation:方法来恢复原来的NSFileWrapper。
这对我有用,因为附件只能由我的应用程序使用和打开。显然,如果您需要对应用程序外部的附件执行某些操作,这将无法工作。在这种情况下,ZIP似乎是合乎逻辑的选择。