2017-12-18 156 views
0

我从网址下载视频文件,并将其与该路径保存在文件目录:文件目录路径变化时重新申请

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 - 文件:///用户/ myMac /库/开发商/ CoreSimulator /设备/ EAC2F4CE-EA09-46C0-B403-1CE9E24B6822 /数据/集装箱/数据/应用/ 1D2C1F7B-E627-4898-91C1 -D0AF8D5E0F1E/Documents/Downloads/pack7-1.mp4

2 - file:/// Users/myMac/Library/Developer/CoreSimulator/Devices/EAC2F4CE-EA09-46C0-B403-1CE9E24B6822/data/Containers/Data /应用/ F950E9A5-C9F3-4B8C-BCF5-647EEC233CEE /Documents/Downloads/pack7-3.mp4

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

如何解决这个问题?

+0

@ivarun:不正确! iOS 8开始每次应用程序启动时应用程序的绝对url变化看看https://stackoverflow.com/questions/26988024/document-or-cache-path-changes-on-every-launch-in-ios-8 –

+0

@ ivarun我在XCODE中反复运行应用程序时在设备中测试它,而没有卸载应用程序,这在设备中也是如此。 – ava

+0

@ava:你检查了我发布的答案吗?没有帮助吗?还有什么问题? –

回答

4

iOS 8起,应用程序沙箱的绝对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每次用户启动应用程序时都会为应用程序创建一个新的Sandbox。因此绝对URL会非常。但是iOS会照顾到早期设置Sandbox内的所有文件夹和内容。因此,尽管SandBox的基础网址发生变化,但所有内容的相对网址仍保持不变。

因此,它建议永远不要将绝对网址保存到任何文件夹:)希望它有帮助

+0

someOne可以访问文件目录中的这个文件夹并复制这个文件夹的内容? – ava

+0

@ava:如果有人有权访问iPhone,那么是的:)您可以随时将您的iPhone连接到Mac,并使用第三方应用程序打开应用程序沙箱并复制内容。如果您想要保护文件免受这些访问,可以使用多种解决方案 –

+0

@ava:解决方案1:将文件保存在临时文件夹中。保存在临时文件夹中的内容都不受iCloud支持,也没有应用程序可以访问它们。但是一个问题是临时文件夹中的内容不会持久。当应用程序被杀死时,临时文件夹中的所有内容都将丢失:D因此,名称temp。阅读:https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html –