後,我已閱讀我發現,使用reachabilityWithHostName
不以URL像這樣的工作對於this question答案:mySite.com/service.asmx
,反正是有檢查可達不要使用reachabilityWithHostName
此網址或任何reachability
類方法?檢查對特定頁面可達性的URL
非常感謝。
後,我已閱讀我發現,使用reachabilityWithHostName
不以URL像這樣的工作對於this question答案:mySite.com/service.asmx
,反正是有檢查可達不要使用reachabilityWithHostName
此網址或任何reachability
類方法?檢查對特定頁面可達性的URL
非常感謝。
可達性類和-reachabilityWithHostname:
被設計成一個快速的快速故障快速機制,用於確定您是否具有與主機的基本網絡連接。如果您需要驗證是否可以下載特定的URL,則需要查看使用NSURLConnection
來檢索URL的內容,以驗證它是否真正可用。
根據您是否需要這樣做的前景或背景,你可以使用簡單,但阻斷:
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
,或者您可以使用創建一個NSURLConnection的對象的更復雜的方法,建立一個委託接收響應,並等待這些響應進來
對於簡單的情況:
NSURL *myURL = [NSURL URLWithString: @"http://example.com/service.asmx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myURL];
[request setHTTPMethod: @"HEAD"];
NSURLResponse *response;
NSError *error;
NSData *myData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
如果您收到的回on-nil myData,你有一些連接。 response
和error
會告訴你服務器對你做出了什麼反應(在響應的情況下,如果你收到了非零的myData)或者發生了什麼樣的錯誤,在無數據的情況下。
對於非平凡的情況,您可以從Apple的Using NSURLConnection得到很好的指導。
如果你不想拖延你的前臺進程,你可以通過兩種不同的方式來做到這一點。上述文檔將提供有關如何實現委託等的信息。但是,更簡單的實現是使用GCD在後臺線程上發送同步請求,然後在完成後在主線程上發出自己的消息。
事情是這樣的:
NSURL *myURL = [NSURL URLWithString: @"http://example.com/service.asmx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myURL];
[request setHTTPMethod: @"HEAD"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, NULL), ^{
NSURLResponse *response;
NSError *error;
NSData *myData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
BOOL reachable;
if (myData) {
// we are probably reachable, check the response
reachable=YES;
} else {
// we are probably not reachable, check the error:
reachable=NO;
}
// now call ourselves back on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
[self setReachability: reachable];
});
});
如果你想檢查對URL(通常使用的是一個主機名)的可達性,只需使用NSURLConnection做一個HEAD請求。
可達只有那裏檢查,如果您有互聯網連接,所以你可以決定你是否應該提醒用戶,因此使用緩存的數據。這是Apple用戶交互準則的一部分。如果您想檢查特定的URL,請嘗試訪問它,將超時設置得非常小並捕獲錯誤。 – 2012-03-08 11:42:51