1

キャッシュを使用せずにサーバーにファイルが存在するかどうかを確認する必要があります。私が使用したメソッドは、ファイルが存在しない場合でもすべて200を返すため、キャッシュの問題があるか、コードに問題があるとしか考えられません。

これが私のコードです:引数のために..この例ではURLが変更されていますが、私のコードではURLは正しいです。

NSString *auth = [NSString stringWithFormat:@"http://www.mywebsite.com/%@.txt",[self aString]];
NSURL *authURL = [NSURL URLWithString:auth];

NSURLRequest* request = [NSURLRequest requestWithURL:authURL 
                                         cachePolicy:NSURLRequestReloadIgnoringCacheData
                                     timeoutInterval:5.0];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request
                                                      delegate:self];

NSHTTPURLResponse* response = nil;
NSError* error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"statusCode = %d", [response statusCode]);

if ([response statusCode] == 404)
    NSLog(@"MISSING");
else
    NSLog(@"EXISTS");

サーバー上のファイルの名前を変更しても、応答は常に200です。

4

2 に答える 2

2

コードにはいくつかの潜在的な問題があります。まず、をconn使用して作成するconnectionWithRequest:delegate:と、非同期リクエストが開始されます。応答は、デリゲートの(selfあなたの場合)connection:didReceiveResponse:メソッドで受信されます。リクエストを非同期で実行しようとしていますか?ただし、コードの残りの部分からは、実際に同期リクエストを実行しようとしているように見えます。それsendSynchronousRequest:returningResponse:error:が目的です。それが意図している場合は、接続を作成するために以前の呼び出しは必要ありません。

その場合は、の呼び出しから返された値をキャプチャして確認する必要がありますsendSynchronousRequest:returningResponse:error:。接続に失敗した場合はnilが返されますが、これが発生していると思われます。次に、返されたエラーを調べて、何が起こっているのかを把握できます。次のようなものを試してください:

NSData * result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

if (result != nil) {
   NSLog(@"statusCode = %d", [response statusCode]);

   if ([response statusCode] == 404)
    NSLog(@"MISSING");
   else
       NSLog(@"EXISTS");
} else {
  NSLog(@"%@", error);
}
于 2010-08-27T20:47:43.447 に答える
1

サーバー側でキャッシュすることは可能ですか?もしそうなら、あなたはNSURLRequestReloadIgnoringLocalAndRemoteCacheDataの代わりに試すことができますNSURLRequestReloadIgnoringCacheData

于 2010-08-27T20:51:03.703 に答える