我正在开发一个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/

10-13 04:01