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メソッドが正しく実装されていないために発生するバグです。目に見える副作用の 1 つとして、半分ダウンロードされた画像が UI に表示されることがあります。

たとえば、応答全体を受信する前にサーバーが切断された場合、 によってエラーは発生しませんNSURLConnectionconnectionDidFinishLoading:いつものように呼び出されます。Content-Length受信したバイト数がヘッダーで指定された数と等しいことを明示的に確認する必要があります(存在する場合)。すべてのデータを受け取っていない場合は、自分でエラーを発生させる必要があります。

の開発ASIHTTPRequestが停止していることに注意してください。作成者によるこのブログ投稿を参照してください。

最近はほとんどの人が推奨しているようですがAFNetworking、前回確認したときは、この早期切断のケースも処理していませんでした.

于 2012-11-27T13:12:58.980 に答える