2012-03-22 62 views
1

只是想知道下面的代碼...當我關閉我的互聯網連接並運行它,我希望我會在我的控制檯日誌中「連接失敗」。任何人都可以解釋爲什麼我不是?謝謝。NSURLConnection沒有給互聯網連接禁止錯誤?

NSString *urlString = [NSString stringWithFormat:@"http://www.myurl.com/RSS/feed.xml"]; 

NSURL *serviceURL = [NSURL URLWithString:urlString]; 

//Create the request 
NSURLRequest *request = [NSURLRequest requestWithURL:serviceURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; 

//Create the connection and send the request 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 


//Make sure the connection is good 
if (connection) { 
    //instantiate the responseData structure to store the response 
    self.responseData = [NSMutableData data]; 

} 
else { 
    NSLog(@"Connection failed"); 
} 

回答

1

您尚未嘗試提出請求。 if (connection)不測試請求是否成功,它只測試您是否能夠創建表示連接的對象。您仍然需要調用其中的一種方法來提出請求。詳情請參閱the documentation

+0

嗯..你能告訴我怎麼可以測試如果它成功了?我試過如果([NSURLConnection canHandleRequest:request]),但似乎沒有工作 – sayguh 2012-03-22 13:19:08

+0

假設你發送一個異步請求,你需要實現委託方法'connection:didFailWithError:'。 – Jim 2012-03-22 14:53:38

+0

感謝您的信息吉姆。重新:下面的評論.. didReceiveData似乎工作,即使WiFi關閉。這就是我所說的緩存。我現在看到,即使頁面返回404,它也會收到數據。您能否告訴我常用的方法是確保您返回了您要查找的完整文件? – sayguh 2012-03-22 16:39:00

1

你想檢查是否連接本身失敗,連接對象的不是創造,使用委託,就像這樣:

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
     NSLog("Oh noes D="); 
} 
+0

我按照你的建議實現了這個委託方法......但是它仍然沒有關閉因特網而開火? – sayguh 2012-03-22 13:26:09

+0

嗯,我看到你的代碼,你確實將代理設置爲self,所以如果該函數不啓動,我不能告訴你問題是什麼。你是否也實現了其他委託方法? (didFinishLoading和didRecieveData)無論如何,3箇中的一個都應該開火! – 2012-03-22 13:28:24

+0

WEIRD!我像你所建議的那樣實施了didReceiveData。我運行該應用程序,它會觸發。然後我關閉WiFi(並驗證我無法訪問任何網站)再次運行應用程序,它仍然會觸發? *迷茫* – sayguh 2012-03-22 13:53:20