2012-03-30 7 views
1

Ich versuche, meine iPhone App robuster zu machen, indem ich sicherstelle, dass sie nicht abstürzt, wenn keine Netzwerkverbindung besteht. Momentan versucht die App beim Start sofort eine Verbindung über den App-Delegaten herzustellen. Es hat keine Probleme, wenn WiFi oder Mobilfunk verfügbar ist, aber es wird abstürzen, wenn keine Netzwerkverbindung sichtbar ist. Ich habe mich auf dieser Seite umgeschaut und nichts gefunden, was zu meinem Problem passt. Ich habe das Gefühl, es sollte nur eine einfache Code-Zeile sein, wie eine Objective-c äquivalent ein pseudo- ‚isConnection‘ oder etwas ähnliches:ios Diagnose iphone Verbindungsstatus

if (isConnection) { 
    - sendSynchronousRequest for json data I'm using 
    - manipulate the data, etc., and continue with normal operations 
} else { 
    - send an output message to a view controller, 
     letting the user know what's wrong. 
} 

Ich kann nicht scheinen, um den (zugegebenermaßen abstrakt zu isolieren) "isConnection" Bedingung, die ich speziell suche. Hat jemand Erfahrung oder Rat zu diesem Thema?

Antwort

0

Die Erreichbarkeitsklasse ist sehr einfach zu bedienen. Laden Sie die Klassendateien hier https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

Sie müssen auch die SystemConfiguration.framework

Hier ist der Code hinzuzufügen, benötigen Sie:

-(BOOL)isConnection { 
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"]; 
    //replace www.google.com with your own host you're checking for 
    NetworkStatus hostStatus = [reach currentReachabilityStatus]; 
    if (hostStatus != NotReachable) { 
     //There are also other status enums like 
     //ReachableViaWiFi 
     //ReachableViaWWAN (3G/LTE) 
     //if you need to detect if user is on cellular, act accordingly 
     return YES; 
    } 
    return NO; 
} 

Dann können Sie Ihre Methode aufrufen:

if ([self isConnection]) { 
    //do something 
} else { 
    //no connection, inform user 
} 
+0

Danke, das ist sehr gut! Genau das, was ich gesucht habe. – pereirap

+0

Gibt es einen Grund, warum Sie meine Antwort nicht akzeptiert haben? Der von Ihnen akzeptierte Partner hat einen Link zum Projekt, aber keinen Beispielcode, gepostet. – Justin

+0

Es tut mir leid - ich weiß nicht einmal, was ich getan habe - Ihre Antwort hat auch zu meinem Verständnis dieses Problems beigetragen. Ich weiß nicht einmal, was nicht akzeptabel ist ... ok, ist das der grüne Haken? Ich überprüfe das jetzt und lass mich wissen, wie ich alles rückgängig machen kann, was ich getan habe! Ich wollte dich überhaupt nicht enttäuschen! Es tut uns leid! Ich bin nur ein Neuling, wo diese Seite betroffen ist. – pereirap

0

Sie können die Erreichbarkeitsklasse verwenden, die Apple in der Reachability sample application bietet. Sie erfahren nicht nur, ob Sie verbunden sind, sondern auch, wie Sie miteinander verbunden sind (WLAN, Mobilfunk oder überhaupt keine Verbindung). Sie können sich sogar für eine Benachrichtigung registrieren, wenn sich der Verbindungsstatus ändert.

Obwohl Sie dies verwenden können, um den Verbindungsstatus zu überprüfen, bevor Sie den oben beschriebenen Code initiieren, sollten Sie trotzdem herausfinden, warum die App abstürzt, wenn keine Verbindung besteht, und versuchen, sie zu beheben. Sie können die Verbindung während eines Anfrageversuchs immer verlieren, und Sie möchten auch nicht, dass die App abstürzt.