我已经为自定义文档格式定义了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/
路径中建立。
是自己清除的东西还是可以访问该目录以删除那些文件?这也很烦人,因为基于文件名,它似乎是一个不同的文件,因此允许导入同一文件的多个副本,而文件名稍有不同。
答案 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)
}
}
}
如果有人有更优雅的解决方案,请也答复。谢谢。