Macos NSURLDownload downloadDidFinish:调用得太早

Macos NSURLDownload downloadDidFinish:调用得太早,macos,cocoa,nsurl,Macos,Cocoa,Nsurl,我工作的OSX应用程序的一个主要组件是下载系统,它是围绕NSURLDownload构建的 我们的绝大多数用户(以及我们的内部开发团队)在下载文件方面没有任何问题。然而,我们似乎有一小部分随机用户(1-2%)是这样做的。对于这些用户,在下载完成之前将调用NSURLDownload的downloaddiffinish:delegate方法。例如,如果用户尝试下载一个5 GB的文件,downloadDidFinish:可能会在仅传输了3.5 GB的数据后被调用,从而导致文件不完整。显然,这给用户带来了

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

我们的绝大多数用户(以及我们的内部开发团队)在下载文件方面没有任何问题。然而,我们似乎有一小部分随机用户(1-2%)是这样做的。对于这些用户,在下载完成之前将调用NSURLDownload的downloaddiffinish:delegate方法。例如,如果用户尝试下载一个5 GB的文件,downloadDidFinish:可能会在仅传输了3.5 GB的数据后被调用,从而导致文件不完整。显然,这给用户带来了很多挫折

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


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

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


我个人认为,在这种情况下,OSX会向我们的NSURLDownload对象发送“完成”(而不是“失败”)通知,这很奇怪。但我想这是苹果公司希望它的工作方式。

可能是源于某些链接失败或您的互联网连接失败。我们尝试模拟错误(断开互联网等),所有这些都会导致下载:didFailWithError:被呼叫。您是否知道可能导致调用downloadDidFinish:的特定网络错误?