Adding a move to upload multiple files

I upload multiple files using AFNetworking 3.0 in my project. I want to show one download of all files. I added that every progress of each file is uploaded to the original process. But this does not work, the application crashed. I get an error -

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

Here is my loading class -

 @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 
+2
source share
1 answer

You forgot to implement the observeValueForKeyPath:ofObject:change:context: method.

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

Source: https://habr.com/ru/post/1238087/


All Articles