Ios 在下载时从NSURLSessionDownloadTask访问字节

Ios 在下载时从NSURLSessionDownloadTask访问字节,ios,objective-c,nsurlsession,nsurlsessiondownloadtask,Ios,Objective C,Nsurlsession,Nsurlsessiondownloadtask,在我的应用程序中,我目前正在使用一个通过HTTP获取文件 这个类提供了一个有用的委托接口来监控它的进度,并在下载完成后通过获取字节,但是在下载字节时(下载完成之前),我无法找到任何方法来访问这些字节 是否可以访问这些字节,或者我需要使用其他机制下载文件?您可以使用以下方法在接收数据时访问数据: -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NS

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

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


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

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

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

@C6Silver的答案是NSURLSessionDataDelegate上的方法,而不是nsurlsessiondownloaddegate。以下是您需要实现的方法:

- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
      totalBytesWritten:(int64_t)totalBytesWritten
      totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
您可以使用
totalBytesWrite
参数访问所需的数据

编辑-我误解了这个问题

您必须使用NSURLSessionDataTask而不是DownloadTask,然后在NSURLSessionDataDelegate上使用委托方法:

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

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

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

这是NSURLSessionDataDelegate所需的方法,而不是NSURLSessionDownloadDelegate。您是正确的。有时,这样长的类/方法名称可能会导致误读。约翰的答案是正确的。我认为那不是真的。从苹果文档中TotalBytesWrite是“到目前为止传输的总字节数”。我正在查找写入临时文件的实际字节数或指向此文件的指针。TotalBytesWrite是。。。在将字节直接传输到文件或内存时写入文件的字节总数。结果是一样的。我想要的是字节的内容,而不是收到的字节数。我现在明白了。在这种情况下,@C6Silver是正确的。您需要使用NSURLSessionDataTask来下载数据,然后使用他在回答中发布的方法在接收数据时访问NSData对象(接收到的数据)。我已经更新了我的答案。