2010-04-08 31 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