-[NSProgress localizedAdditionalDescription]
可以报告下载速度和剩余时间,例如:然而,当我将1.61 GB of 3.22 GB (2 KB/sec) — 2 minutes remaining
NSProgress
与NSURLSessionDownloadTask
关联时,我无法获取这些详细信息。 这是我的代码:Downloader.h
@interface Downloader : NSObject
@property NSProgress *overallProgress;
-(void)startDownload;
@end
Downloader.m
- (void)startDownload {
self.overallProgress = [NSProgress progressWithTotalUnitCount:100];
[self.overallProgress setKind:NSProgressKindFile];
[self.overallProgress setUserInfoObject:NSProgressFileOperationKindKey forKey:NSProgressFileOperationKindDownloading];
[self.overallProgress becomeCurrentWithPendingUnitCount:100];
[self work1];
[self.overallProgress resignCurrent];
}
- (void)work1 {
NSProgress *firstTaskProgress = [NSProgress progressWithTotalUnitCount:1];
[firstTaskProgress setKind:NSProgressKindFile];
[firstTaskProgress setUserInfoObject:NSProgressFileOperationKindKey forKey:NSProgressFileOperationKindDownloading];
NSURL *downloadURL = [NSURL URLWithString:@"http://ipv4.download.thinkbroadband.com/200MB.zip"];
NSURL *destinationDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *destinationURL = [destinationDirectory URLByAppendingPathComponent:[downloadURL lastPathComponent]];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDownloadTask *fileDownloadTask =
[session downloadTaskWithURL:downloadURL
completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error){
[[NSFileManager defaultManager] removeItemAtURL:destinationURL error:NULL];
[[NSFileManager defaultManager] moveItemAtURL:location toURL:destinationURL error:nil];
[firstTaskProgress setCompletedUnitCount:1];
}];
[fileDownloadTask resume];
}
DownloadObserver.m
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
downloader = [Downloader new];
[downloader addObserver:self
forKeyPath:@"overallProgress.fractionCompleted"
options:NSKeyValueObservingOptionNew
context:NULL];
[downloader startDownload];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@", [downloader.overallProgress localizedAdditionalDescription]);
}
这只会打印出:
0 of 100
Zero KB of 100 bytes
我该如何让 localizedAdditionalDescription
打印下载速度和剩余时间?
NSProgress
为您执行这些计算的。 - Eric