IOS:当网络不可用时使用stringWithContentsOfURL

时间:2012-05-11 09:43:05

标签: ios error-handling initwithcontentsofurl

在我的应用程序中针对可访问网络进行此代码轮询  ( “http://soxxx9.cafe24.com/event.php”)

   NSString * szURL =[NSString stringWithFormat:@"http://soxxx9.cafe24.com/event.php"];

   NSURL *url = [NSURL URLWithString:[szURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]];

   NSString *strData;
   while(1)
  {
    NSError *error = nil;
    strData = [NSString stringWithContentsOfURL:url
                                             encoding:NSUTF8StringEncoding
                                                error:&error];
    if(!error)
       break;
    //String data is not owned by me, no need to release
}

如果你有更好的方法,请教我。

2 个答案:

答案 0 :(得分:1)

当网络出局时,此代码似乎耗费大量资源:您将尝试数百万次下载无法访问的内容......

查看Apple提供的Reachability类(http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html)。你会在gitHub上找到ARCified版本(例如https://github.com/tonymillion/Reachability)。

想法是注册有关网络可达性的通知。

所以,在你的代码中:

  1. 在检索所需字符串之前检查网络资源可用性。
  2. 如果可以,请使用您的代码,不要使用while(TRUE)
  3. 检查字符串是否有任何错误,同时在代码
  4. 中检索客户端=

    如果网络不可用,则必须通知用户网络无法访问,并注册可访问性通知,以便在再次访问时再次检索字符串。

答案 1 :(得分:0)

您应该有一个类来为您处理连接。通过这种方式,您可以更好地控制正在发生的事情。 MKNetworkKit是一种解决方案,您可以查看here