gpt4 book ai didi

ios - 在后台创建 session 下载任务

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:50 31 4
gpt4 key购买 nike

在我的应用程序中,我在后台使用了 NSURLSessionDownloadTask。当应用程序在前台时,我恢复一个下载任务。稍后,当应用程序再次进入后台时,该下载任务完成,在函数 didCompleteError 中,我想在应用程序仍在后台时创建另一个下载任务。但是下载任务没有运行。谁能帮帮我?

最佳答案

试试这段代码:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite


-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error


-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes


-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location

不像 NSURLConnection,我们通常为每个请求创建一个连接,使用 NSURLSession,我们创建一个 session ,而不是有多个任务。

那么让我们定义我们的 session :

NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfiguration:@“myUniqueAppID”];
_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

我们首先要做的是创建一个配置,这将允许它在后台运行。该配置需要一个特定于您的应用程序的唯一标识符。最好使用您应用的 bundle 标识符,例如 com.yourCompany.appName

一旦我们有了配置,我们就可以实例化我们的 session ,我们将引用传递给我们的委托(delegate)以及我们希望它在哪个队列上运行。您最喜欢将其作为主队列。

就本主题而言,我们将只处理下载任务。因此,一旦您获得了要下载的文件的 URL,就可以通过 session 创建一个 downloadTask:

NSURLSessionDownloadTask* task = [_session downloadTaskWithRequest:request];

[task resume];

现在,NSURLSession 的工作方式是,它将您的文件直接下载到一个临时目录。所以你不需要担心存储它。

虽然它正在下载,但它会通知您已下载了多少,这对于通知您的用户下载进度非常有用:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
CGFloat percentDone = (double)totalBytesWritten/(double)totalBytesExpectedToWrite;
// Notify user.
}

下载文件后,将调用以下方法:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
// Either move the data from the location to a permanent location, or do something with the data at that location.
}

该方法的最后一个参数是数据下载到的位置。从这里,您可以将文件移动到可以使用它的永久位置,或者您可以访问数据并对其进行处理。但是,该数据不会保留在那里,因此如果您真的需要它,请确保不要离开它。

值得注意的是任务,就像一个NSURLConnection可以被取消:

[_currentTask cancel];

这涵盖了使用 NSURLSession 下载文件的基础知识。

我希望你觉得这很有用!

关于ios - 在后台创建 session 下载任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757441/

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