将文档从iMessage导入应用程序-删除放置在“收件箱”中的临时文件

时间:2019-06-18 03:57:59

标签: ios swift xcode url uti

我已经为自定义文档格式定义了UTI。我可以从应用程序中导出文件,并将它们附加到短信,电子邮件等中。我可以通过在iMessage中点击文档图标将文件导入到我的应用程序中。通过点击文档图标,我可以选择复制到我的应用程序。这会触发我的AppDelegate中的一个调用来处理传入的文件。

困扰我的是传入文件的网址是:

  

文件:/// 私有 / var / mobile / Containers / Data / Application / 21377C94-1C3C-4766-A62A-0116B369140C / Documents / < em>收件箱 / ...

在将文档保存到.documents目录时,我使用以下URL:

  

file:/// var / mobile / Containers / Data / Application / 21377C94-1C3C-4766-A62A-0116B369140C / Documents / ...

区别在于/private//Inbox/路径组成部分。

问题:如何清除从iMessage复制到我的应用程序的文件的/private/.../Inbox/路径?我在测试我的应用程序时注意到了这一点,当我在iMessage中点击相同的文档图标时,它开始生成具有相同名称的文件副本,但将-1,然后依次为-2-3添加到iMessage中文档的文件名。看来副本正在该/private/.../Inbox/路径中建立。

是自己清除的东西还是可以访问该目录以删除那些文件?这也很烦人,因为基于文件名,它似乎是一个不同的文件,因此允许导入同一文件的多个副本,而文件名稍有不同。

1 个答案:

答案 0 :(得分:0)

好吧,这需要花很多时间来挖掘,但是我将发布我的解决方案,到目前为止,该解决方案似乎可以奏效,以防有人遇到相同的问题。

let fileManager = FileManager.default
// get the URL for the "Inbox"
let tmpDirURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("Inbox")
// get all the files in the "Inbox" directory
let anythingThere = try? fileManager.contentsOfDirectory(at: tmpDirURL, includingPropertiesForKeys: nil)
if anythingThere?.count ?? 0 > 0 {
   for eachURL in anythingThere! {
       // for each url pointing to a file in that directory, get its path extension
       let pathExtension = eachURL.pathExtension
       // test to see if it's a UTI that you're interested in deleting
       // in my case, the three "OCC" strings are the relevant UTI extensions
       if pathExtension == "OCCrcf" || pathExtension == "OCCrdi" || pathExtension == "OCCsrf" {
            // attempt to delete the temporary file that was copied to the 
            // "Inbox" directory from importing via email, iMessage, etc.
            try fileManager.removeItem(at: eachURL)
       }
   }
}

如果有人有更优雅的解决方案,请也答复。谢谢。