Файл iPhone SDK Remote существует, без кеша - PullRequest
1 голос
/ 27 августа 2010

Мне нужно проверить, существует ли файл на моем сервере без использования кэша. Все методы, которые я использовал, возвращают 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, даже если я переименую файл на сервере.

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Есть несколько потенциальных проблем с вашим кодом. Во-первых, когда вы создаете conn с использованием connectionWithRequest:delegate:, вы запускаете асинхронный запрос. Ответ будет получен в методе делегата (self в вашем случае) connection:didReceiveResponse:. Вы пытаетесь сделать запрос асинхронно? Из остальной части вашего кода, похоже, вы пытаетесь сделать синхронный запрос. Вот для чего sendSynchronousRequest:returningResponse:error:. Если это то, что вы намереваетесь, то вам не нужен более ранний вызов для создания соединения.

Предполагая, что это так, вам нужно захватить и проверить значение, возвращаемое при вызове sendSynchronousRequest:returningResponse:error:. Он вернет ноль, если соединение не удалось, что, как я подозреваю, происходит. Затем вы можете посмотреть на ошибку, чтобы выяснить, что происходит. Попробуйте что-то вроде:

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);
}
1 голос
/ 28 августа 2010

Возможно ли это кэширование на стороне сервера?Если это так, вы можете попробовать NSURLRequestReloadIgnoringLocalAndRemoteCacheData вместо NSURLRequestReloadIgnoringCacheData.

...