为多个文件下载添加子进度

     2023-02-24     98

关键词:

【中文标题】为多个文件下载添加子进度【英文标题】:Adding child progress for multiple file download 【发布时间】:2016-02-07 04:47:51 【问题描述】:

我正在我的项目中使用 AFNetworking 3.0 下载多个文件。我想显示所有文件的单个下载进度。我将每个文件下载的每个子进度添加到父进度中。但它不起作用,应用程序崩溃了。我收到了错误 -

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<DownloadManager: 0x7f92e2f6e130>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: fractionCompleted

这是我的下载类-

@interface DownloadManager ()

@property (nonatomic, strong) NSProgress *progress;
@property (nonatomic, strong) Settings *settings;
@property (nonatomic, strong) DocumentDirectory *documentDirectory;

@end


@implementation DownloadManager

- (instancetype)init

    self = [super init];
    if (self) 
        self.progress = [NSProgress new];
        [self.progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:NULL];
        self.settings = [Settings new];
        self.documentDirectory = [DocumentDirectory new];
    

    return self;


- (void) dealloc 
    [self.progress removeObserver:self forKeyPath:@"fractionCompleted"];



//Download the file from remote server in the document directory as Zip format
- (void) downloadCarContents:(NSArray *)urlArray forContent:(NSArray *)contentArray 

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    self.progress.totalUnitCount =  urlArray.count;
    self.progress.completedUnitCount = 0;

    for (NSInteger i = 0; i < urlArray.count; i++) 

        NSString *destinationPath = [self.documentDirectory getDownloadContentPath:contentArray[i]];
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlArray[i]]];

        NSURLSessionTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) 

            return [NSURL fileURLWithPath:destinationPath];

         completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) 


        ];

        NSProgress *childProgress = [manager downloadProgressForTask:task];
        [self.progress addChild:childProgress withPendingUnitCount:1];

        NSLog(@"Total downloaded : %f", self.progress.fractionCompleted * 100.0);

        [task resume];
    


@end

【问题讨论】:

【参考方案1】:

您忘记实现observeValueForKeyPath:ofObject:change:context: 方法。

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *, id> *)change
                       context:(void *)context 
    if ([keyPath isEqualToString:@"fractionCompleted"]) 
        // process value
    

【讨论】:

哦,是我的错。谢谢。 还有一个问题。如何确保在 completionHandler 块中成功下载所有内容?我需要在 completionHandler 块中进行验证,但不需要在带有 1.0 分数值完成检查的 observeValueForKeyPath 方法中进行验证?

使用 SparkSQL 读取多个 parquet 文件时将子文件夹作为列获取

】使用SparkSQL读取多个parquet文件时将子文件夹作为列获取【英文标题】:GetthesubfolderasacolumnwhilereadingmultipleparquetfileswithSparkSQL【发布时间】:2020-07-0913:38:32【问题描述】:我想为使用SparkSQL从parquet文件加载的每个DataFrame添加一列... 查看详情

将多个子视图添加到 UIView

】将多个子视图添加到UIView【英文标题】:AddingmultiplesubviewstoaUIView【发布时间】:2017-01-2419:41:51【问题描述】:我正在使用一个名为TWRCharts的iOS图表软件,我正在尝试在同一个视图控制器中添加多个图表。我已经使用InterfaceBuild... 查看详情

将具有多个子视图的视图截图为 wkwebview

】将具有多个子视图的视图截图为wkwebview【英文标题】:Takingscreenshotofaviewwithmultiplesubviewsaswkwebview【发布时间】:2016-04-1211:37:05【问题描述】:我在iOS应用程序中有一个视图,其中添加了多个wkwebview作为子视图来呈现html内容。... 查看详情

excel表格按行数或者其他文字拆分为多个文件

...:此方法用于将大的excel根据某一列里面的内容,拆分为多个子文件。我的需求是将文件里面的记录每100条拆分为1个文件。因此需要手动添加分类列。   1手动添加分类列需要用到函数 =ROUNDUP(ROW(A1)/100,0) ,在(A1,2)... 查看详情

Xcode iOS Build - 仅将特定子文件夹复制为捆绑资源

...文件夹。现在我需要一个合适的解决方案...我有一个包含多个目 查看详情

python使用matplotlib函数subplot可视化多个不同颜色的折线图为每一个子图添加子图小标题(subtitle)

Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为每一个子图添加子图小标题(subtitle)目录 查看详情

如何将每个带有一组子命令的 Click 命令拆分为多个文件?

】如何将每个带有一组子命令的Click命令拆分为多个文件?【英文标题】:HowcanIsplitmyClickcommands,eachwithasetofsub-commands,intomultiplefiles?【发布时间】:2016-04-1103:54:30【问题描述】:我已经开发了一个大型点击应用程序,但浏览不同的... 查看详情

Azure Blob 存储多个同时上传的进度

】AzureBlob存储多个同时上传的进度【英文标题】:Azureblobstoragemultiplesimultaneousuploadswithprogress【发布时间】:2021-03-2421:54:10【问题描述】:我正在尝试将多个文件同时从JavaScript上传到AzureBLOB存储。我不确定它是如何处理并行性的... 查看详情

在 iPad 上以编程方式添加子视图,硬编码

】在iPad上以编程方式添加子视图,硬编码【英文标题】:AddingsubviewsprogrammaticallyoniPad,hardcoding【发布时间】:2010-06-0402:09:52【问题描述】:我在我的应用程序中添加了一个自定义状态栏来监控上传进度。这在纵向模式下可以正常... 查看详情

无法将自己添加为子视图

...2013-11-1922:19:12【问题描述】:我们使用Crashlytics,已有30多个用户看到此崩溃。此崩溃日志来自该领域的用户。我们从未能够复制它。这是在iOS7上运行的。不知道是什么原因造成的,因为您可以看到调用堆栈中没有与我们的应用... 查看详情

为oled屏添加gui支持6:进度条控件

为OLED屏添加GUI支持6:进度条控件本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10开发环境:MDK5.13MCU:STM32F103源码:gui_widget_progbar.h/***Copyright(c),2015-2025*@filegui_widget_progbar.h*@brief文本控件头文件*@ 查看详情

celery 任务的实时进度跟踪

...800:48:35【问题描述】:我有一个主要的celery任务,它启动多个子任务(数千个)执行多个操作(每个子任务相同的操作)。我想要的是,从主要的celery任务实时跟踪每个动作,每个子任务完成了多少,失败了多少。总结!主要任... 查看详情

编写异步控制器并更新进度

...ync/await功能来:提交文件。例如,此文件可能包含一个或多个条目。(例如,可以是一个只有一个元素的XML文件,或者每个文件可以列出多个节点)我需要单独处理每个呼叫,将其添加到已完成项目列表中,并将进度作为单个任... 查看详情

绑定多个下载进度

】绑定多个下载进度【英文标题】:BindingMultipleDownloadProgress【发布时间】:2015-12-1610:20:02【问题描述】:我在ObservableCollection中有一个DownloadOperation列表,并且该变量具有Progress.TotalBytesToReceive和Progress.BytesReceived属性。当我尝试... 查看详情

添加多个相同类型的子表单

】添加多个相同类型的子表单【英文标题】:Addmultiplesubformsofthesametype【发布时间】:2011-04-2106:19:16【问题描述】:我最近在处理表单和子表单。我创建了以下内容:$form=newApplication_Form_Cv();$experience=newZend_Form_SubForm();$form->addSub... 查看详情

如何将视图添加为某些控制器的子视图

...发布时间】:2019-05-2110:40:07【问题描述】:我的应用中有多个故事板。我想在某些控制器的导航栏下方的顶部始终添加一个视图。我怎样才能做到这一点?我已经使用了导航委托并在窗口中添加了一个视图,但没有运气。在附加... 查看详情

用一个进度条下载多个文件 java / Android

】用一个进度条下载多个文件java/Android【英文标题】:Downloadmultiplefileswithoneprogressbarjava/Android【发布时间】:2018-06-0923:04:06【问题描述】:我在for()循环的帮助下在AsyncTask中下载多个文件。下面的代码工作正常,但每个下载的文... 查看详情

PHP & .htaccess:为多个目录添加文件

】PHP&.htaccess:为多个目录添加文件【英文标题】:PHP&.htaccess:prependfileforMultipleDirectories【发布时间】:2017-08-1203:06:04【问题描述】:我想使用.htaccess自动添加PHP脚本。我知道有一个指令可以做到这一点。我在web根目录的.hta... 查看详情