在下载时从 NSURLSessionDownloadTask 访问字节
Accessing the bytes from NSURLSessionDownloadTask as they are downloaded
在我的应用程序中,我目前正在使用 NSURLSessionDownloadTask 通过 HTTP 获取文件。
此 class 提供了一个有用的委托接口来监控其进度并在通过 NSURLSessionDownloadDelegate 下载完成后获取字节,但是我无法找到任何访问字节的方法它们已下载(在下载完成之前)。
是否可以访问这些字节,或者我是否需要使用其他机制下载文件?
您可以使用以下方法访问正在接收的数据:
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
@C6Silver 的回答是 NSURLSessionDataDelegate 上的方法,而不是 NSURLSessionDownloadDelegate 上的方法。这是您需要实现的方法:
- (void)URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
您可以使用 totalBytesWritten
参数访问您需要的数据。
编辑 - 我误解了问题。
您将不得不使用 NSURLSessionDataTask 而不是 DownloadTask,然后在 NSURLSessionDataDelegate 上使用委托方法:
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data;
这将允许您访问收到的数据。
如果您想要访问下载的字节,您应该使用数据任务,而不是下载任务。如果您随后实现 NSURLSessionDataDelegate
方法(具体来说,didReceiveData
),您可以在下载字节时访问这些字节。
在我的应用程序中,我目前正在使用 NSURLSessionDownloadTask 通过 HTTP 获取文件。
此 class 提供了一个有用的委托接口来监控其进度并在通过 NSURLSessionDownloadDelegate 下载完成后获取字节,但是我无法找到任何访问字节的方法它们已下载(在下载完成之前)。
是否可以访问这些字节,或者我是否需要使用其他机制下载文件?
您可以使用以下方法访问正在接收的数据:
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
@C6Silver 的回答是 NSURLSessionDataDelegate 上的方法,而不是 NSURLSessionDownloadDelegate 上的方法。这是您需要实现的方法:
- (void)URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
您可以使用 totalBytesWritten
参数访问您需要的数据。
编辑 - 我误解了问题。
您将不得不使用 NSURLSessionDataTask 而不是 DownloadTask,然后在 NSURLSessionDataDelegate 上使用委托方法:
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data;
这将允许您访问收到的数据。
如果您想要访问下载的字节,您应该使用数据任务,而不是下载任务。如果您随后实现 NSURLSessionDataDelegate
方法(具体来说,didReceiveData
),您可以在下载字节时访问这些字节。