我从 url 下载视频文件并将其保存在具有以下路径的文档目录中:
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4"
let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true)
let fileURL: URL = folderPath.appendingPathComponent(pathComponent)
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
我的视频已成功下载并播放。 但是有一个问题,当我在 Xcode 中重建应用程序并尝试播放我下载的最后一个视频时,视频没有显示,当我下载一个新视频时,这个保存并成功播放。
我看过每个视频包路径,它们是不同的。
1 - 文件:///Users/myMac/Library/Developer/CoreSimulator/Devices/EAC2F4CE-EA09-46C0-B403-1CE9E24B6822/data/Containers/Data/Application/1D2C1F7B-E627 -4898-91C1-D0AF8D5E0F1E/Documents/Downloads/pack7-1.mp4
2 - 文件:///Users/myMac/Library/Developer/CoreSimulator/Devices/EAC2F4CE-EA09-46C0-B403-1CE9E24B6822/data/Containers/Data/Application/F950E9A5-C9F3-4B8C-BCF5 -647EEC233CEE/Documents/Downloads/pack7-3.mp4
现在,我的问题是,当我们从 App Store 更新应用程序时,是否意味着重新安装?这条路径会改变吗?
如何解决这个问题?
最佳答案
从 iOS 8 开始,每次您重新启动应用程序时,应用程序沙箱的绝对 URL 都会发生变化。因此,你不应该保存视频的绝对 url。保存视频的名称并在每次重新启动应用程序时重新创建 url。
let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4"
let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true)
let fileURL: URL = folderPath.appendingPathComponent(pathComponent)
一旦您有了 fileURL
查找该文件,您将找到在上次启动时下载的文件。
每次用户启动应用程序时,iOS 都会为应用程序创建一个新的沙盒。因此绝对 URL 会非常。但 iOS 将像以前一样负责设置沙盒内的所有文件夹和内容。因此,尽管 SandBox 的基本 url 发生变化,但所有内容的相对 url 将保持不变。
因此建议永远不要将绝对 url 保存到任何文件夹 :) 希望对您有所帮助
关于ios - 重建应用程序时文档目录路径更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864143/