gpt4 book ai didi

objective-c - 如何使用 NSURLSession 跟踪多次下载?

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:50 26 4
gpt4 key购买 nike

如何使用 NSURLSession 跟踪多次下载?

例如:

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *jsonTask = [session downloadTaskWithURL:[NSURL URLWithString:[urlString stringByAppendingString:@"iOSMenu.json"]]];
NSURLSessionDownloadTask *imageTask = [session downloadTaskWithURL:[NSURL URLWithString:[urlString stringByAppendingString:@"menu1@2x.png"]]];
NSURLSessionDownloadTask *titleTask = [session downloadTaskWithURL:[NSURL URLWithString:[urlString stringByAppendingString:@"titleBar@2x.png"]]];

[jsonTask resume];
[imageTask resume];
[titleTask resume];

我下载了这三个文件,我可以用NSLog确认,像这样。

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
NSLog(@"%@", location);
}

但我不知道如何访问和区分这些文件。我该怎么做?

最佳答案

didFinishDownloadingToURL 方法在该委托(delegate)方法中向您传递对 NSURLSessionDownloadTask 的引用。由此,您可以引用任务的 taskIdentifier 或引用任务的 originalRequest.URL 属性。

您要确保将位于 location 的文件移动到您将来可以访问的地方(当您从 didFinishDownloadingToURL 返回时,它将删除那个临时文件,如果你不对它做任何事情)。

例如,您可以将文件保存到文档文件夹中。在此示例中,我将获取原始 URL 的最后一个路径组件,创建文档文件夹中文件的路径,并将文件移动到新位置:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [documentsPath stringByAppendingPathComponent:[downloadTask.originalRequest.URL lastPathComponent]];
NSURL *newLocation = [NSURL fileURLWithPath:path];

NSError *error;
if (![[NSFileManager defaultManager] moveItemAtURL:location toURL:newLocation error:&error]) {
NSLog(@"failed to move %@ to %@: %@", location, newLocation, error);
}
}

或者,如果您不想依赖原始 URL 的 lastPathComponent,您可以维护一个字典,将任务标识符(或原始 URL)映射到您要保存文件的新位置.您可以在创建任务时构建该字典,然后 didFinishDownloadingToURL 可以使用该字典中的任务标识符查找所需的目的地,并在 moveItemAtURL 方法中使用它.显然,如果这是一个后台 session ,您需要确保将此交叉引用保存到持久存储中,以便您可以在下载完成后重新启动应用程序时重新检索它。

关于objective-c - 如何使用 NSURLSession 跟踪多次下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25446779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com