gpt4 book ai didi

ios - 如何从 NSURLSessionDownloadTask downloadTaskWithRequest 获得响应

转载 作者:可可西里 更新时间:2023-11-01 05:20:13 25 4
gpt4 key购买 nike

先介绍一些背景:应用程序应该从 AWS S3 服务器获取文件。为此,该过程的第一步是转到本地服务器并从中获取文件名和其他一些信息。在该步骤之后,我们有一个完整的 URLMutableRequest

注意:我正在将 NSURLSession 设置为后台 session :

- (NSURLSession *)backgroundSession
{
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"identifier"];
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
return session;
}

这是从 AWS S3 服务器下载文件的任务:

对于此任务我想使用委托(delegate)在后台模式下运行。

@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;
@property (nonatomic, strong) NSURLSession *defaultSession;

self.defaultSession = [self backgroundSession];
self.downloadTask = [self.defaultSession downloadTaskWithRequest:request];
[self.downloadTask resume];

如何从这个请求中得到响应?

Apple 文档说在使用 backgroundSessionConfiguration 时不能将 block 作为 completionHandler。

最佳答案

如果有人想知道如何在下载完成之前获取下载响应,请尝试以下操作:改为启动 dataTask,获取响应,然后在需要时将 dataTask 转换为下载。

NSURLSessionTask *task = [session dataTaskWithRequest:request];
[task resume];

NSURLSessionDataDelegate

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
// use response, convert data task to download task
completionHandler(NSURLSessionResponseBecomeDownload);
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask {
// downloadTask converted from dataTask
}

NSURLSessionDownloadDelegate

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
// update progress
}

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
// copy downloaded file from location
}

关于ios - 如何从 NSURLSessionDownloadTask downloadTaskWithRequest 获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530251/

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