2012-03-29 5 views
1

Ich würde gerne wissen, ob es eine automatische Möglichkeit gibt zu wissen, wann die Verbindung wiederhergestellt wurde.iphone - Verbindung wiederhergestellt Callback

Meine App verbindet sich mit einem Webservice, sagen wir, das Netzwerk ist in diesem Moment nicht verfügbar, also wird die App die Informationen vom Server nicht bekommen, aber ich möchte, dass die App automatisch versucht, sich mit dem Server zu verbinden "fühlt", dass die Verbindung wiederhergestellt wurde.

Gibt es einen solchen Rückruf?

Antwort

2

In welcher Klasse Sie Ihre NSURLConnection behandeln, müssen Sie eine Verbindungsprüfung hinzufügen. So unten ich ein Beispiel gebucht haben

  1. eine Instanz Erreichbarkeits erstellen
  2. einen Beobachter In der Erreichbarkeits hat Benachrichtigung Änderung
  3. Wenn die Verbindung ändert sich das - (void) networkReachabilityDidChange: (NSNotification *) Benachrichtigung wird gefeuert werden.
  4. Sie überprüfen offensichtlich die vor network eine Verbindung in erster Linie abzufeuern.

    -(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]; 
    } 
    

Dies ist nur ein einfaches Beispiel, aber Sie müssen wahrscheinlich die Anforderung bestehen bleiben, bis die Verbindung verfügbar geworden ist, so dass Sie es weg später abfeuern kann. Dies könnte über NSOperationQueue oder etwas Ähnliches geschehen.

1

Es gibt so etwas aus der Sicht der Standardbibliothek nicht. Sie müssen das selbst implementieren. Sie können den Code Reachability von Apple verwenden, um auf Netzwerkänderungen zu warten. Sobald Sie eine Benachrichtigung aus dem Erreichbarkeitscode erhalten, dass das Internet jetzt verbunden ist, können Sie eine URL-Verbindung auslösen. Wenn Sie ein Beispiel brauchen, könnte ich Ihnen schnell etwas vormachen.

+1

Dies sollte getan werden. In der Tat Apple sagen, dass, wenn Ihre App eine Datenverbindung verwendet, sollten Sie die Trennung/Verbindung ordnungsgemäß behandeln und melden, dass keine Daten für den Benutzer verfügbar sind. Deshalb haben sie das Erreichbarkeitsbeispiel erstellt. –

+0

Wenn Sie dieses Beispiel veröffentlichen könnten, wäre es großartig, etwas zu beginnen. – subharb

Verwandte Themen