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
时,您正在启动一个异步请求。响应将在委托(在您的情况下为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);
【讨论】:
它实际上是我的服务器。我使用自定义错误文档,所以我只是禁用了 404,瞧!【参考方案2】:它可能在服务器端缓存吗?如果是这样,您可以尝试NSURLRequestReloadIgnoringLocalAndRemoteCacheData
而不是NSURLRequestReloadIgnoringCacheData
。
【讨论】:
以上是关于iPhone SDK 远程文件存在,没有缓存的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Leopard 下载适用于 iPhone 的 SDK?
我可以在 iphone3.0 上安装用 iphone sdk 3.1.3 开发的 iphone 应用程序吗?