Проверьте, возвращает ли NSURL 404

Мне нужно проверить, доступен ли URL (представленный NSURL) или возвращает 404. Каков наилучший способ достичь этого?

Я бы предпочел, чтобы проверить это без делегата, если это возможно. Мне нужно заблокировать выполнение программы, пока не узнаю, доступен ли URL или нет.

Мне было нужно решение, которое не использовало делегат, поэтому я взял fragmentы кода, показанные в других ответах, и создал простой метод, который хорошо работает в моем случае (и может быть, и то, что вы ищете):

  -(BOOL) webFileExists { NSString *url = @"http://www.apple.com/somefile.html"; NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0]; NSHTTPURLResponse* response = nil; NSError* error = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"statusCode = %d", [response statusCode]); if ([response statusCode] == 404) return NO; else return YES; } 

Я использовал ответ из woodmantech выше, но изменил его на основе того, что я видел по другим аналогичным вопросам здесь, чтобы он не загружал весь файл, чтобы узнать, существует ли он.

Я изменил NSURLRequest на NSMutableURLRequest и добавил:

 [request setHTTPMethod:@"HEAD"]; 

Кажется, это работает нормально. Я работаю над своим первым приложением, поэтому никакого реального опыта пока нет. Всем спасибо.

  NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0]; [request setHTTPMethod:@"HEAD"]; NSHTTPURLResponse* response = nil; NSError* error = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"statusCode = %d", [response statusCode]); 

Вы можете добиться синхронного соединения, позвонив:

 NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; NSHTTPURLResponse* response = nil; NSError* error = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

Ваш stream будет блокироваться до тех пор, пока запрос не будет выполнен.

Давайте будем гением компьютера.