ava*_*ava 11 filepath ios nsdocumentdirectory 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])
}
Run Code Online (Sandbox Code Playgroud)
我的视频已下载并成功播放.但是有一个问题,当我在Xcode中重建应用程序并尝试播放我下载的最后一个视频时,视频没有显示,当我下载新视频时,这个保存并成功播放.
我已经看过每个视频包路径,它们是不同的.
1 - file:/// 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 - file:/// 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更新应用程序时,是否意味着重新安装?这条路是否改变了?
怎么能解决这个问题?
San*_*ari 28
从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)
Run Code Online (Sandbox Code Playgroud)
一旦你fileURL查找文件,你会发现在以前推出下载的文件.
每次用户启动应用程序时,iOS都会为应用程序创建一个新的Sandbox.因此,绝对URL将非常.但是iOS会像以前一样设置Sandbox中的所有文件夹和内容.因此,虽然SandBox的基本网址发生了变化,但所有内容的相对网址将保持不变.
因此建议永远不要将绝对URL保存到任何文件夹:)希望它有所帮助
我建议使用书签。查看以下文章中的使用书签定位文件部分:https : //developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672 -CH3
编辑:
链接文档的一些相关部分,以防万一:
重要提示:虽然在您的应用程序运行时使用它们是安全的,但在您的应用程序启动之间存储和重用文件引用 URL 并不安全,因为如果系统重新启动,文件的 ID 可能会更改。如果您想在应用程序启动之间持久存储文件的位置,请按照使用书签定位文件中的说明创建书签。
我有一个使用大量文件处理的应用程序,因此我在 NSURL 类别中创建了以下方法来返回给定 URL 的书签数据。
- (NSData*)defaultBookmark
{
NSError* error = nil;
NSData* bookmarkData = [self bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
if (error != nil)
{
NSLog(@"error creating bookmark for url '%@': %@", self, error);
}
return bookmarkData;
}
Run Code Online (Sandbox Code Playgroud)
要从书签数据创建 NSURL 对象,请使用以下内容:
NSError* error = nil;
BOOL isStale = NO;
NSURL* url = [NSURL URLByResolvingBookmarkData:bookmarkData
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:nil
bookmarkDataIsStale:&isStale
error:&error];
if (error != nil || url == nil)
{
NSLog(@"Error restoring url from bookmark: %@", error);
}
else
{
// use url to load file
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5905 次 |
| 最近记录: |