NSURLDownload-downloadDidFinish:调用太早



我工作的OSX应用程序的主要组件之一是一个下载系统,它是围绕NSURLDownload构建的。

我们的绝大多数用户(以及我们的内部开发团队)在下载文件时没有任何问题。然而,我们似乎在全球范围内有一小部分随机用户(1-2%)这样做。对于这些用户,NSURLDownload的downloadDidFinish:delegate方法在下载完成之前被调用。例如,如果用户试图下载一个5 GB的文件,那么downloadDidFinish:可能在传输了3.5 GB的数据后被调用,从而导致文件不完整。显然,这让用户感到非常沮丧。

我们在这个问题上花了很多时间,但没有取得多大进展。我们已经看到,至少有一种情况是OS X(错误地?)调用downloadDidFinish:太早,那就是Mac卷的可用空间不足。这让我觉得很奇怪,因为为什么不调用下载:didFailWithError:delegate方法呢?但绝大多数下载不完整的用户都有足够的磁盘空间,所以我们不认为磁盘空间不足是他们的问题。

所以我想我的问题是:你们知道NSURLDownloaddownloadDidFinish:可能在下载完成之前被调用的原因吗(除了磁盘空间不足)?谢谢你能给我们的任何建议。

Anoop上面的建议看起来是正确的。我们回到绘图板上,比以前更好地模拟了服务器端的断开连接。我们发现,通过这样做,我们的客户端软件将收到NSURLDownload:downloadDidFinish:通知。

就我个人而言,在这种情况下,OSX会向我们的NSURLDownload对象发送"完成"(而不是"失败")通知,这很奇怪。但我想这正是苹果希望它发挥作用的方式。

最新更新