NSMutableURLRequest
とを使用してNSURLConnection
サーバーにデータを送信するiOSアプリに取り組んでいます。失敗したときにエラーメッセージを表示する必要があります。リクエストを送信するための私のコードを以下に示します
const int TIMEOUT = 120;
-(void)send:(id<NSURLConnectionDelegate>)delegate
{
bodyContents = [bodyContents stringByAppendingFormat:@"--%@--",boundry];
NSData *data = [bodyContents dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setValue:[NSString stringWithFormat:@"%i",[data length]+4] forHTTPHeaderField:@"Content-Length"];
NSLog(@"Timeout before setting custom is %f",request.timeoutInterval);
[request setTimeoutInterval:TIMEOUT];
NSLog(@"Timeout after setting custom is %f",request.timeoutInterval);
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:delegate];
if(connection)
NSLog(@"Connection good");
else
NSLog(@"Connection not so good");
}
//in the delegate class
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSLog(@"connectionDidFinishLoading");
}
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError *)error
{
NSLog(@"Failed with error %@",error);
btnCancel.title = @"Retry";
self.navigationItem.hidesBackButton = NO;
[self showAlertDialog:[NSString stringWithFormat:@"%@",[error localizedDescription]] :@"Error"];
}
2分間応答がない場合、didFailWithErrorメッセージが呼び出されると思います。代わりに、約15秒間応答がない場合に呼び出されますが、これは意味がありません。ドキュメントを見て、タイムアウトを間違って設定していないかどうかを確認しました。唯一見つけたのは、本文のある投稿の最小タイムアウトは240秒であり、これを惜しみなく受け入れるようになりました。
アプリの実行からの出力は次のようになります。
2012-06-22 16:49:12.393メディアアップロード[672:707]カスタムを設定する前のタイムアウトは240.000000です
2012-06-22 16:49:12.394メディアアップロード[672:707]カスタム設定後のタイムアウトは240.000000です
2012-06-22 16:49:12.395メディアアップロード[672:707]接続が良好
2012-06-22 16:49:29.174メディアのアップロード[672:707]エラーで失敗しましたエラードメイン=NSURLErrorDomainコード=-1001「リクエストがタイムアウトしました。」等
なぜこんなに早くタイムアウトするのか、私は少し混乱しています。接続が作成されたときにサーバーが起動していないので、接続があまり良くないのではなく、接続が良いと表示される理由さえわかりませんが、それは別の問題です(私は願っています)何か提案はありますか?