2010-04-08 50 views
0

我從Web服務中檢索數據與...如何測試一個Web服務可用

NSString *myDataString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&outError]; 

我該如何處理的情況下的網絡服務不可用?因爲它現在是應用程序簡單掛斷。

有沒有辦法測試一個網站是否可用?或者,initWithContentsOfURL沒有任何超時功能。

我看着使用URLConnection作爲請求和接收數據字符串的替代方法。然而,我不知道如何。

感謝您的任何幫助。

約翰

回答

3

,則不應使用initWithContentsOfURL:,它是一個阻塞API,將導致您的應用程序掛起同時執行,除非你手動生成一個新的線程來運行它,並妥善管理。

您應該使用NSURLConnection來執行Web請求。

使用NSURLConnection您將獲得非阻塞異步功能,並且還能夠處理諸如身份驗證,響應代碼,超時和取消請求等內容。

查找文檔NSURLConnectionNSURLRequest(還有NSMutableURLRequest)。

NSURLConnection委託方法是,你將如何處理響應代碼,認證等

至於你原來的問題,你可以測試web服務的availbility在許多方面:

  • 使用Apple的Reachability示例來測試互聯網連接和/或主機是否可從當前網絡訪問。
  • 使用NSURLConnection來處理來自服務器的響應代碼。 200可以,404找不到,401需要授權,500內部服務器錯誤等,等等
    • 您可以根據代碼執行不同的操作。
+0

謝謝。我認爲我現在走在正確的軌道上,但我對可達性的東西感到困惑。 SCNetworkReachability標誌只告訴你設備連接到網絡。它不會告訴你外部主機的可用性。 在iPhone開發的食譜有2個上市對我做同樣的事情... connectedToNetwork(pg305) hostAvailable(第307) 第二種方法將只返回NO,如果我物理斷開裝置網絡。 我不明白什麼使用第二種方法是如果第一個做同樣的事情。 再次感謝您的幫助。 – user278859 2010-04-09 21:31:48

+0

Apple的可訪問性示例具有檢查特定主機的可訪問性的方法。我在我自己的應用程序中使用它。我使用'[Reachability reachabilityWithHostName:@「蘋果。com「];'這將返回一個新的可達性實例,該實例將監視所提供的主機名。 – Jasarien 2010-04-09 22:17:22