4

ねえ、私はオンライン画像が存在するかどうかを知る必要があるプログラムを持っていますが、これを機能させる唯一の方法は、NSDataポインタに画像をロードし、ポインタが存在するかどうかを確認することです。

- (BOOL)exists {
      NSString *filePath = @"http://couleeapps.hostei.com/BottomBox.png";
      NSURL *url = [NSURL URLWithString:filePath];
      NSData *imageData = [NSData dataWithContentsOfURL:url];
      if (imageData) {
            return YES;
      }
            return NO;
}

これは私にとってはうまくいきましたが、私の問題は、接続が非常に遅く、画像をダウンロードするのに永遠にかかることです。だから私の質問は:ブールレポーターメソッドでダウンロードすることなく、画像(「 http://couleeapps.hostei.com/BottomBox.png 」など)が利用可能かどうかをチェックする方法はありますか?

ヘルプは大歓迎です

HiGuy

4

2 に答える 2

16

NSURLConnectionURLを取得するためのを作成します。HTTPMethodの代わりにをにNSURLRequest設定します。デリゲートメソッドで、の200またはその他の成功応答を確認します。"HEAD""GET"connection:didReceiveResponse:statusCodeNSHTTPURLResponse

-(void) queryResponseForURL:(NSURL *)inURL {
  NSMutableURLRequest request = [NSMutableURLRequest requestWithURL:inURL];

  [request setHTTPMethod:@"HEAD"];

  NSURLConnection connection = [NSURLConnection connectionWithRequest:request delegate:self];
  // connection starts automatically
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
  if ( [(NSHTTPURLResponse  *)response statusCode] == 200 ) {
    // url exists
  }
}

301のように、成功として扱う他のステータスコードが存在する可能性があります。

HTTPプロトコルの一部は、リクエストメソッドの設定です。GETとPOSTは最も一般的な2つですが、HEADを含む他のいくつかがあります。HEADは、GETの場合と同じ応答を送信すると言いますが、本文は送信しないでください。あなたの場合、本文は画像データです。したがって、HEADが成功した場合、少なくとも静的リソースを検索する場合は、GETも同じように成功すると想定できます。

于 2010-06-06T18:23:33.927 に答える
1

connectionWithRequestは減価償却されます。したがって、dataTaskWithRequestを使用する必要があります。

    -(void) queryResponseForURL:(NSURL *)inURL {
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:inurl
                                                               cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                           timeoutInterval:60.0];

        [request setHTTPMethod:@"HEAD"];
        NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSUInteger respCode=[(NSHTTPURLResponse  *)response statusCode];
            if ( !error&&respCode == 200 ) {
                    // url exists
            } else {
                    // url does not exist
            }

        }];
        [postDataTask resume];
    }
于 2015-11-29T20:56:49.433 に答える