2014年2月4日火曜日

[iOS][Objective-C]NSURLConnectionでファイルDLする場合の注意点


どうも。

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できたかどうか?
の確認をした方が確実。
確認方法は実情に合わせて。



それでは。
ちゃお☆


まこぴー。