我使用- (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;
}
下载内容。
我使用KVO在 progress.fractionCompleted == 1 时读取下载的文件。当我读到文件时,我发现有一些 nil 。
所以,我想知道何时我可以阅读文件。 进度完成表示在磁盘上完全写入文件或只是接收所有数据。
修改
<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet2.css"/>
<title>homepage</title>
</head>
<body>
<div id="videowrap">
<video id ="videobg" preload="auto" autoplay="true" loop>
<source src="secret.3gp" >
</video>
</div>
<div id="button">
<img src= "button.png"/>
</div>
</body>
</html>
那么,应该首先写文件然后设置进度?但为什么我得到一个零?
答案 0 :(得分:1)
如果要向用户显示某种进度,可以跟踪委托方法的进度。但那是不你怎么知道何时抓取文件。
知道何时可以获取文件的方法是在委托方法URLSession:downloadTask:didFinishDownloadingToURL:
触发时。您必须使用该委托方法获取文件。
你必须立即 。你不能在它们之间使用KVO,因为在委托方法触发的时刻与通过KVO通知你的那一刻之间的间隔内,文件可能会被销毁。当我们从URLSession:downloadTask:didFinishDownloadingToURL:
返回时,它会被销毁。这就是为什么你必须在里面那个方法中抓住它,而不是其他地方。