iPhone SDK 远程文件存在,没有缓存

Posted

技术标签:

【中文标题】iPhone SDK 远程文件存在,没有缓存【英文标题】:iPhone SDK Remote file exists, without cache 【发布时间】:2010-08-27 19:38:16 【问题描述】:

我需要在不使用缓存的情况下检查我的服务器上是否存在文件。我用的方法都是返回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。

【问题讨论】:

请出示您的代码。如果我们能看到正在发生的事情,您将获得更好的答案。 【参考方案1】:

您的代码存在几个潜在问题。首先,当您使用connectionWithRequest:delegate: 创建conn 时,您正在启动一个异步请求。响应将在委托(在您的情况下为selfconnection: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);

【讨论】:

它实际上是我的服务器。我使用自定义错误文档,所以我只是禁用了 404,瞧!【参考方案2】:

它可能在服务器端缓存吗?如果是这样,您可以尝试NSURLRequestReloadIgnoringLocalAndRemoteCacheData 而不是NSURLRequestReloadIgnoringCacheData

【讨论】:

以上是关于iPhone SDK 远程文件存在,没有缓存的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Leopard 下载适用于 iPhone 的 SDK?

iPhone SDK:TextView,横向模式下的键盘

我可以在 iphone3.0 上安装用 iphone sdk 3.1.3 开发的 iphone 应用程序吗?

iOS:如果没有可用的互联网,谷歌分析 SDK 是不是会缓存所有数据以便稍后发送?

新款 iPhone SE 真的要来了,价格有惊喜

有没有办法在 VS2012 中使用 sdk 6.1 远程构建 Xamarin.iOS?