1

我正在开发一个允许用户将文件(例如 .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"
)}

我遇到的两个需要帮助的问题是:

  1. UIPasteboard.general.itemProviders.first?.suggestedName为 PDF 返回错误的文件名,但在成功的情况下,相同的代码返回正确的文件名。

  2. 在处理 docx 文件时,self.data(forPasteboardType: "org.openxmlformats.wordprocessingml.document")UIPasteboard 扩展中的数据在两种情况下是不同的(打印出的数据显示字节数不同),并且失败的情况无法使用 QLPreviewItem 打开该文件,但它可以成功设想。

显然,在处理导致这些问题的邮件附件(以及可能的其他情况)时,我遗漏了一些东西,但我不确定是什么。任何帮助将不胜感激!!!

4

0 回答 0