2010-08-27 60 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