NSProgress 显示完成时无法读取文件?

Can't read file when NSProgress shows complete?

我用[manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){}]下载东西。

我在 progress.fractionCompleted==1 时使用 KVO 读取下载的文件。我发现当我阅读文件时,我得到了 nil

所以,我想知道什么时候我可以读取文件。并且进度完成意味着完全将文件写入磁盘或者只是接收所有数据.

编辑

- (void)URLSession:(__unused NSURLSession *)session
      downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask
      didWriteData:(__unused int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    self.progress.totalUnitCount = totalBytesExpectedToWrite;
    self.progress.completedUnitCount = totalBytesWritten;
}

所以,应该是先写文件再设置进度吧?但是为什么我得到一个零???

如果您想向用户显示某种进度,可以在委托方法中跟踪进度。但那是不是你知道何时抓取文件的方式。

知道何时可以抓取文件的方法是在委托方法 URLSession:downloadTask:didFinishDownloadingToURL: 触发时。您必须在该委托方法中获取文件

而且你必须立即去做。您不能在这两者之间使用 KVO,因为在委托方法触发的那一刻和通过 KVO 通知您的那一刻之间的间隔内,文件可能会被破坏。当我们从 URLSession:downloadTask:didFinishDownloadingToURL: return 时,它被销毁 。这就是为什么您必须在该方法 抓住它,而不是在其他任何地方。