gpt4 book ai didi

ios:NSURLSessionDataTask 并从不同 View 下载

转载 作者:行者123 更新时间:2023-11-29 02:35:18 24 4
gpt4 key购买 nike

我现在尝试在我的ios应用程序中实现后台文件下载,我有点困惑...我的应用程序中有很多不同的 View ,我想开始从其中许多 View 下载文件,并在已呈现的 View 中显示进度。我的目标的第一部分(下载文件)是通过在应用程序委托(delegate)中创建一个 NSURLSession 来实现的,这样我就可以在任何 View 中获取它并开始下载文件。

在 AppDelegat 中

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"com.myEnglishLessons"];
sessionConfiguration.HTTPMaximumConnectionsPerHost = 111;
self.currentSession = [NSURLSession sessionWithConfiguration:sessionConfiguration
delegate:nil
delegateQueue:nil];

在某些 View 中

NSURLSessionDataTask *downloadTask = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] currentSession] downloadTaskWithURL: myURL];
[downloadTask resume];

一切都很好,但问题是什么 - 我无法在 View 中处理和显示进度。 NSURLSession 的委托(delegate)是 appDelegate,所以它接收下载过程的事件,而不是 View 的类。你能给我什么建议吗?

最佳答案

您可以使用 downloadTask.taskDescription 设置 View ID 或 View 类名。因此,当您从 View 创建任务时,您可以这样写:

NSURLSessionDataTask *downloadTask = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] currentSession] downloadTaskWithURL: myURL];
[downloadTask setTaskDescription:NSStringFromClass([self class])];
[downloadTask resume];

然后就可以发送进行中的通知URLSession方法:

    CGFloat progress = (CGFloat)totalBytesWritten/totalBytesExpectedToWrite;
[[NSNotificationCenter defaultCenter] postNotificationName:kDownloadTaskProgressNotification object:nil
userInfo:@{@"progress": @(progress), @"viewClass": downloadTask.taskDescription];

并且所有 View 都应遵守此通知。您还需要在收到通知时添加类检查。

关于ios:NSURLSessionDataTask 并从不同 View 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433755/

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