小编Mad*_*ios的帖子

在文档目录下载或移动文件异步 - iOS

我正在构建一个iOS应用程序,用户可以在其中下载不同的文件.
我正在使用an URLSessionDownloadTask和an URLSession异步下载文件.
下载完成后,目标文件夹默认为tmp/目录.
因此,当下载结束时,我需要将临时文件移动到另一个目录.
对于图片或歌曲,这只需要1秒甚至更短.
但是,当文件是视频时,最多可能需要15秒.

问题

为了让用户仍然可以与应用程序进行交互,我想让这个移动异步.
每次我尝试这样做时,文件管理器都会抛出异常.

"CFNetworkDownload_xxxxxx.tmp"无法移动到"下载",因为前者不存在,或者包含后者的文件夹不存在.

我试过了什么

我试图在后台线程中调用文件管理器,它会抛出.

我尝试在调用move方法之前删除目标文件,以确保该文件尚不存在.

copy在从tmp/目录中删除文件之前,我尝试调用该函数.

我的代码

对文件管理器的调用看起来像那样.

func simpleMove(from location: URL, to dest: URL) -> Bool {
    let fileManager = FileManager.default
    do {
        try fileManager.moveItem(at: location, to: dest)
        return true
    } catch {
        print("\(error.localizedDescription)")
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

当我把它放在后台线程中时,我这样做.

DispatchQueue.global().async {
    if !simpleMove(from: location, to: dest) {
        //Failure
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

如何在不影响UI的情况下移动真正大的文件?

将文件直接下载到永久目录中是一种更好的解决方案.我怎样才能做到这一点?

当我simpleMove(from:to:)同步拨打电话时,它完美无缺.
那么,为什么错误说目标目录不存在?(或类似的东西,我不确定该错误的含义)

谢谢.

注意

上面的代码是用Swift 3编写的,但是如果你有Objective-C或Swift 2的答案,也可以 …

asynchronous download nsfilemanager ios nsurlsession

10
推荐指数
2
解决办法
981
查看次数