如果url存在Objective-c

Gle*_*ith 4 url image exists objective-c download

嘿,我有一个程序需要判断一个在线图像是否存在,但我唯一能让它工作的方法是在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;
}
Run Code Online (Sandbox Code Playgroud)

这对我有用,但我的问题是我的连接速度非常慢,下载图像需要花费很长时间.所以我的问题是:有没有办法检查图像(说" http://couleeapps.hostei.com/BottomBox.png ")是否可用,而无需在布尔报告方法中下载?

非常感谢帮助

HiGuy

dra*_*ard 16

创建一个NSURLConnection以获取网址.设置HTTPMethodNSURLRequest,以"HEAD"代替"GET".在委托方法connection:didReceiveResponse:检查statusCodeNSHTTPURLResponse200或其他成功响应.

-(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
  }
}
Run Code Online (Sandbox Code Playgroud)

您可能会将其他状态代码视为成功,例如301.

HTTP协议的一部分是设置请求方法.GET和POST是最常见的两种,但还有其他一些包括HEAD.HEAD说发送你要为GET发送的相同回复,但不发送正文.在您的情况下,正文是图像数据.因此,如果HEAD成功,您可以假设GET也会以相同的方式成功,至少在查找静态资源的情况下.