我工作的OS X应用程序的一个主要组件是下载系统,它是围绕NSURLDownload构建的。
绝大多数用户(以及我们的内部开发团队)在下载文件时都没有任何问题。但是,我们似乎在全球范围内拥有一小部分随机用户(1-2%)。对于这些用户,在下载完成之前,将调用NSURLDownload的downloadDidFinish:delegate方法。例如,如果用户尝试下载5 GB文件,则在传输3.5 GB数据后可能会调用downloadDidFinish:,从而导致文件不完整。显然,这会给用户带来很多挫折。
我们在这个问题上花了很多时间,但没有取得多大进展。我们已经看到至少有一种情况,OS X(错误地?)调用downloadDidFinish:太早了,那时Mac的可用空间不足。这让我感到很奇怪,因为为什么不下载:didFailWithError:委托方法被调用?但绝大多数下载不完整的用户都有足够的磁盘空间,因此我们认为磁盘空间不足是他们的问题。
所以我想我的问题是:你们知道任何原因(除磁盘空间不足)为什么NSURLDownload downloadDidFinish:可能在下载完成之前被调用?感谢您给我们的任何建议。
答案 0 :(得分:0)
Anoop上面的建议看起来是正确的。我们回到绘图板并模拟了服务器端断开连接,比以前更好。我们发现,通过这样做,我们的客户端软件将收到NSURLDownload:downloadDidFinish:notifications。
我个人认为,在这种情况下,OS X会向我们的NSURLDownload对象发送“完成”(而非“失败”)通知,这很奇怪。但我想这就是Apple希望它发挥作用的方式。