3

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

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

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

4

3 回答 3

2

如果您想在下载字节时访问它们,您应该使用数据任务,而不是下载任务。如果您随后实现NSURLSessionDataDelegate方法(特别是didReceiveData),您可以在下载字节时访问它们。

于 2015-04-28T03:26:02.603 回答
1

您可以使用以下方法在接收数据时访问数据:

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
于 2015-04-28T02:46:07.020 回答
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;

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

于 2015-04-28T02:49:11.273 回答