我正在开发一个iOS应用程序,用于从服务器下载文件(NSURLSession和NSURLSessionDownloadTask
进行下载。
我的问题是,下载视图控制器不是rootViewController
。当我回到根视图控制器时,我可以看到下载进度仍然有效(来自NSLog
)。但是,当我再次下载视图控制器时,我看不到标签根据进度进行了更新。在这种情况下,如何获取NSURLSession
当前正在运行的后台 session 以更新状态标签?还是其他解决方案?
//Start downloading
-(void)startDownload: (NSString *)url{
NSString *sessionId = MY_SESSION_ID;
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionId];
sessionConfiguration.HTTPMaximumConnectionsPerHost = 1;
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration
delegate:self
delegateQueue:nil];
self.downloadTask = [self.session downloadTaskWithURL:[NSURL URLWithString:url]];
[self.downloadTask resume];
}
//Delegate
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
if (totalBytesExpectedToWrite == NSURLSessionTransferSizeUnknown) {
NSLog(@"Unknown transfer size");
}
else{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSInteger percentage = (double)totalBytesWritten * 100 / (double)totalBytesExpectedToWrite;
self.percentageLabel.text = [NSString stringWithFormat:@"Downloading (%ld%%)", (long)percentage];
NSLog(@"Progress: %ld", (long)percentage);
}];
}
}
最佳答案
这是我在代码中所做的,并且有效:
[[self performSelectorOnMainThread:@selector(setuploadStatus :) withObject:[NSString stringWithFormat:@“Upload%ld %%”,(long)percentage] waitUntilDone:NO];
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
NSInteger percentage = (double)totalBytesSent * 100 / (double)totalBytesExpectedToSend;
**[self performSelectorOnMainThread:@selector(setuploadStatus:) withObject:[NSString stringWithFormat:@"Upload %ld%%", (long)percentage] waitUntilDone:NO];**
NSLog(@"Upload %ld%% ",(long)percentage);
}
-(void) setuploadStatus : (NSString *) setStat {
[_notifyTextLabel setText:setStat];
}
关于ios - 导航 View Controller 时如何获取NSURLSession的当前正在运行的后台 session ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23750720/