iphone - 连接恢复回调

时间:2012-03-29 09:37:46

标签: iphone connection

我想知道是否有自动知道何时恢复连接的方式。

我的应用程序连接到web服务,假设网络在那一刻不可用,因此应用程序将无法从服务器获取信息,但我希望应用程序自动尝试重新连接到服务器,如果它“感觉“连接已经恢复。

有这样的回调吗?

2 个答案:

答案 0 :(得分:2)

在您处理NSURLConnection的任何类中,您都需要添加一些连接检查。所以下面我发布了一个例子

  1. 创建可达性实例
  2. 向Reachability添加观察者更改通知
  3. 当连接发生变化时,将触发 - (void)networkReachabilityDidChange :( NSNotification *)通知。
  4. 您显然在首先启动连接之前检查networkStatus。

     -(id)init
    {
        self = [super init];
        if(self)
        {
            Reachability* newInternetReachability = [Reachability reachabilityForInternetConnection];
            [newInternetReachability startNotifier];
            self.networkReachability = newInternetReachability;
    
            networkStatus = [self.networkReachability currentReachabilityStatus];
    
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkReachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
        }
    
        return self;
    }
    
    - (void) startHTTPRequest
    {
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:YOUR_URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:YOUR_REQUEST_TIMEOUT];
        NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest: delegate:self];
    
    }
    
    
    - (void)networkReachabilityDidChange:(NSNotification *)notification
    {
        Reachability *currReach = [notification object];
        NSParameterAssert([currReach isKindOfClass: [Reachability class]]);
    
        int currStatus = [currReach currentReachabilityStatus];
    
        // Check that current reachability is not the same as the old one
        if(currReach != self.networkReachability)
        {
              switch (currStatus) {
                  case ReachableViaWiFi:
                       // fire off connection
                       [self startHTTPRequest];
                       break;
                  case ReachableViaWWAN:
                       // Fire off connection (3G)
                       [self startHTTPRequest];
                       break;
                  case NotReachable:
                       // Don't do anything internet not reachable
                       break;
                  default:
                  break;
        }
        [self updateReachability];
    }
    
  5. 这只是一个简单的示例,但您可能需要保留请求,直到连接可用,以便以后可以将其关闭。这可以通过NSOperationQueue或类似的东西来完成。

答案 1 :(得分:1)

从标准库的角度来看,没有这样的事情。你必须自己实现它。您可以使用Apple的Reachability代码来监听网络更改。因此,一旦您收到来自可访问性代码的通知,说明互联网已连接,您就可以启动URL连接。如果你需要一个例子我可以快速为你嘲笑。