0

我想使用 ASIHTTPRequest 下载文件,方法如下:

ASIHTTPRequest *request;
request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:downloadServer]];
[request setUserInfo:[NSDictionary dictionaryWithObject:@"download" forKey:@"download"]];
[request setDidFinishSelector:@selector(downloadIsFinished:)];
[request setDidFailSelector:@selector(downloadIsFailed:)];
[request setDelegate:self];
[request setTimeOutSeconds:40];
[request setDownloadProgressDelegate:self];
[request setShowAccurateProgress:YES];
[request startAsynchronous];

如果我在 Wifi 上一切都很好,但如果我在 3G 上,那么我的方法会尝试下载文件,但 10 秒后 downloadIsFinish 委托会触发,但我的文件实际上并没有被下载......

4

1 回答 1

0

这种事情通常是由于没有NSURLConnectionDelegate正确实现方法而导致的错误。一种可见的副作用可能是出现在您的 UI 中的半下载图像。

例如,如果服务器在您收到整个响应之前断开连接,则不会引发错误NSURLConnectionconnectionDidFinishLoading:像往常一样被调用。您必须明确检查您收到的字节数是否等于Content-Length标头中指定的数字(如果存在)。如果您尚未收到所有数据,则需要自己引发错误。

请注意,开发ASIHTTPRequest已停止。请参阅其创建者的这篇博文

现在大多数人似乎都在推荐AFNetworking,尽管上次我检查他们也没有处理这种早期断开连接的情况。

于 2012-11-27T13:12:58.980 回答