5

ほとんどの場合、かなり些細な質問ですが、完了ブロックは常に使用して呼び出され[NSURLConnection sendAsynchronousRequest: ...]ますか?または、タイムアウトタイマーを実装する必要がありますか?

MBProgressView呼び出しの前にaを追加し、完了ブロックでのみ削除する次の点を考慮してください。

[self showHUDWithTitle:@"Configuring"];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[[NSOperationQueue alloc] init]
                       completionHandler:^(NSURLResponse *response,
                                           NSData *data,
                                           NSError *error) {

     if ([data length] >0 && error == nil) {
         [self hideHUDWithFlag:YES 
                      andTitle:@"Finished" 
                   andSubtitle:@"(Box was configured)"];

     } else if ([data length] == 0 && error == nil) {
         [self hideHUDWithFlag:NO 
                      andTitle:@"Failed" 
                   andSubtitle:@"(Check box connection)"];
         NSLog(@"Nothing was downloaded.");

     } else if (error != nil) {
        [self hideHUDWithFlag:NO 
                     andTitle:@"Error" 
                  andSubtitle:@"(Check box connection)"];
         NSLog(@"Error = %@", error);
     }
 }];
4

3 に答える 3

15

はい、完了ハンドラーは常に呼び出されます。タイムアウトが原因でリクエストが失敗した場合は、errorが設定されdata = nilます。

Aのデフォルトのタイムアウトは60秒ですが、接続を開始する前にNSURLRequest別の値を割り当てることができます。request.timeoutInvervalしたがって、追加のタイマーは必要ありません。

追加:タイムアウトの場合:

  • [error domain]、、NSURLErrorDomain_
  • [error code]NSURLErrorTimedOut

エラーメッセージを表示したいだけの場合は[error localizedDescription]、「リクエストがタイムアウトしました」というメッセージを使用できます。この場合。(これはロケールによって異なる場合があります。)

于 2013-03-20T08:23:43.200 に答える
2
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url
                                              cachePolicy:NSURLCacheStorageAllowed             
                                          timeoutInterval:20];
于 2013-07-27T09:24:21.417 に答える
0

[NSURLConnection sendAsynchronousRequest:...]は、どのシナリオでも確実に完了ブロックを呼び出します。ただし、このプロセスを最大時間に制限する場合は、タイムアウトタイマーを使用することもできます。

プログレスバーの場合、値をどのようにインクリメントしますか?プログレスバーの代わりに、アクティビティインジケーターを使用することをお勧めします。

お役に立てれば。

于 2013-03-20T08:22:56.453 に答える