一尘不染

重建应用程序时文档目录路径更改

swift

我从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 /文档/下载/pack7-3.mp4

现在,我的问题是,当我们从App Store更新应用程序时,是否意味着要重新安装?这条路会改变吗?

如何解决这个问题?


阅读 277

收藏
2020-07-07

共1个答案

一尘不染

从iOS
8开始,每次重新启动应用程序时,指向应用程序沙箱的绝对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保存到任何文件夹:)希望能有所帮助

2020-07-07