我正在开发一个允许用户将文件(例如 .pdf 和 .docx)粘贴到应用程序中的应用程序。我让它运行良好,除了通过长按本机邮件应用程序中的附件复制文件时。
我知道文件不是问题,因为如果我在同一封电子邮件中长按相同的附件,而不是选择“复制”,而是选择“共享”,然后从共享表中选择“复制”,我可以粘贴文件成功。
粘贴时,我使用UIPasteboard.general.itemProviders.first
. 在上述两种情况下, 中只有 1 项UIPasteboard.general.itemProviders
,但是打印出UIPasteboard.general.itemProviders[0]
我看到以下内容的描述:
对于 PDF 文件:直接从长按复制时(失败场景):
<UIItemProvider: 0x28255a290> {types = (
"com.apple.mobilemail.attachment",
"com.adobe.pdf",
"public.url"
)}
从长按复制时,然后点击“共享”,然后点击“复制”(成功的场景)来自同一电子邮件的同一 PDF 文件:
<UIItemProvider: 0x28255b2c0> {types = (
"com.adobe.pdf"
)}
对于 docx 文件:直接从长按复制时(失败场景):
<UIItemProvider: 0x28055d6c0> {types = (
"com.apple.mobilemail.attachment",
"com.apple.WebKit.custom-pasteboard-data",
"Apple Web Archive pasteboard type",
"org.openxmlformats.wordprocessingml.document"
)}
从长按复制时,然后点击“共享”,然后点击“复制”(成功的场景)来自同一电子邮件的同一 docx 文件:
<UIItemProvider: 0x28055c8c0> {types = (
"org.openxmlformats.wordprocessingml.document"
)}
我遇到的两个需要帮助的问题是:
UIPasteboard.general.itemProviders.first?.suggestedName
为 PDF 返回错误的文件名,但在成功的情况下,相同的代码返回正确的文件名。在处理 docx 文件时,
self.data(forPasteboardType: "org.openxmlformats.wordprocessingml.document")
UIPasteboard 扩展中的数据在两种情况下是不同的(打印出的数据显示字节数不同),并且失败的情况无法使用 QLPreviewItem 打开该文件,但它可以成功设想。
显然,在处理导致这些问题的邮件附件(以及可能的其他情况)时,我遗漏了一些东西,但我不确定是什么。任何帮助将不胜感激!!!