2010-08-27 59 views
1

我需要检查我的服务器上是否存在不使用缓存的文件。我使用的方法都返回200,即使该文件不存在,所以我只能假设存在缓存问题,或者我的代码存在问题。iPhone SDK远程文件存在,不需要缓存

继承人我的代码︰参数sake..the 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

请显示您的代码。如果我们能看到发生了什么,你将有更好的运气获得答案。 – 2010-08-27 19:46:56

回答

2

您的代码有几个潜在的问题。首先,当您使用connectionWithRequest:delegate:创建conn时,您正在启动异步请求。答复将在代表处(您的案例中的selfconnection: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); 
} 
+0

它实际上是我的服务器。我使用自定义错误文档,所以我只是禁用404,瞧! – WrightsCS 2010-08-27 21:18:25

1

它有可能在服务器端进行缓存吗?如果是这样,你可以尝试​​而不是NSURLRequestReloadIgnoringCacheData