どうも。
NSURLConnectionでファイルをダウンロードする場合、
URLを取得して、requestを発行した後、
いくつかのデリゲートメソッドを使用してハンドリングするが、
その際に注意点が発生する。
// ヘッダが返ってきた
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
// ダウンロード中
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
// ダウンロードエラー
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
// ダウンロード完了
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
注意点(1) -----
レスポンスがOK(200)ではなく、
Forbidden(403)などでも、
ファイルとしてDLしてしまうケースがあるので、
didReceiveResponse内でステータスコードを取得しておいて、
didReceiveData内でステータスコードがOK(200)であるかどうか判断する必要がある。
(デリゲートメソッドをまたぐのが面倒…(´・ω・`))
ステータスコードを取得するには、
ヘッダに、
int resStatus;
などと定義しておき、
didReceiveResponse内で、
resStatus = ((NSHTTPURLResponse *)response).statusCode;
とすればよい。
注意点(2) -----
ファイルがDLできなくても、
connectionDidFinishLoadingが呼ばれてしまうことがある。
(具体的なケース等の詳細は不明…。)
念のため、
目当てのファイルがDLできたかどうか?
の確認をした方が確実。
確認方法は実情に合わせて。
それでは。
ちゃお☆
まこぴー。