iphone - соединение восстановлено - PullRequest
1 голос
/ 29 марта 2012

Я хотел бы знать, есть ли автоматический способ узнать, когда было восстановлено соединение.

Мое приложение подключается к веб-сервису, скажем, в данный момент сеть недоступна, поэтому приложение не будетполучить информацию с сервера, но я хотел бы, чтобы приложение автоматически пыталось восстановить соединение с сервером, если оно "чувствует", что соединение восстановлено.

Есть ли такой обратный вызов?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

В каком бы классе вы ни работали с NSURLConnection, вам нужно добавить некоторую проверку соединения. Итак, ниже я разместил пример

  1. Создать экземпляр Reachability
  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];
    }
    

Это только простой пример, но вам, вероятно, нужно сохранить запрос до тех пор, пока соединение не станет доступным, чтобы вы могли отключить его позже. Это может быть сделано через NSOperationQueue или что-то подобное.

1 голос
/ 29 марта 2012

С точки зрения стандартной библиотеки такого не бывает. Вам придется реализовать это самостоятельно. Вы можете использовать код Apple Reachability для прослушивания изменений в сети. Поэтому, как только вы получите уведомление от кода Reachability, в котором говорится, что Интернет теперь подключен, вы можете отключить URL-соединение. Если вам нужен пример, я могу быстро что-нибудь сделать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...