在下载时访问NSURLSessionDownloadTask中的字节

时间:2015-04-28 02:41:00

标签: ios objective-c nsurlsession nsurlsessiondownloadtask

在我的应用中,我正在使用NSURLSessionDownloadTask通过HTTP获取文件。

这个类提供了一个有用的委托接口,用于监视其进度并在下载完成后通过NSURLSessionDownloadDelegate获取字节,但是我无法找到任何方法来访问下载的字节(在下载完成)。

是否可以访问这些字节,还是需要使用其他机制下载文件?

3 个答案:

答案 0 :(得分:2)

如果要在下载时访问字节,则应使用数据任务,而不是下载任务。如果您随后实施NSURLSessionDataDelegate方法(具体而言,didReceiveData),则可以在他们下载后访问这些字节。

答案 1 :(得分:1)

您可以使用以下方法访问收到的数据:

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data

答案 2 :(得分:1)

@ 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;

这将允许您在收到数据时访问。