1413 Stimmen

Wie kann ich unter iOS oder macOS prüfen, ob eine aktive Internetverbindung besteht?

Ich möchte überprüfen, ob ich unter iOS eine Internetverbindung habe, indem ich die Kakao Touch Bibliotheken oder auf macOS mit der Kakao Bibliotheken.

Ich habe eine Möglichkeit gefunden, dies mit einer NSURL . Die Art und Weise, wie ich es gemacht habe, erscheint mir etwas unzuverlässig (denn selbst Google könnte eines Tages ausfallen, und sich auf einen Dritten zu verlassen, erscheint mir schlecht), und obwohl ich prüfen könnte, ob eine Antwort von anderen Websites kommt, wenn Google nicht antwortet, erscheint es mir verschwenderisch und ein unnötiger Mehraufwand für meine Anwendung.

- (BOOL)connectedToInternet {
    NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
    return ( URLString != NULL ) ? YES : NO;
}

Ist das, was ich getan habe, schlecht, (ganz zu schweigen von stringWithContentsOfURL ist in iOS 3.0 und macOS 10.4 veraltet) und wenn ja, was ist ein besserer Weg, dies zu erreichen?

34voto

Ben Groot Punkte 4960

Nur die Erreichbarkeitsklasse wurde aktualisiert. Sie können jetzt verwenden:

Reachability* reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

if (remoteHostStatus == NotReachable) { NSLog(@"not reachable");}
else if (remoteHostStatus == ReachableViaWWAN) { NSLog(@"reachable via wwan");}
else if (remoteHostStatus == ReachableViaWiFi) { NSLog(@"reachable via wifi");}

28voto

Alejandro Rangel Punkte 1640

Eine Version der Erreichbarkeit für iOS 5 ist darkseed/Reachability.h . Es ist nicht meins! =)

26voto

JK Laiho Punkte 3368

Hier gibt es eine schöne, ARC- und GCD-verwendende Modernisierung von Reachability:

Erreichbarkeit

23voto

Bruno Koga Punkte 3834

Wenn Sie Folgendes verwenden AFNetworking können Sie seine eigene Implementierung für den Internet-Erreichbarkeitsstatus verwenden.

Der beste Weg zur Nutzung AFNetworking ist die Unterklasse der AFHTTPClient Klasse und verwenden Sie diese Klasse für Ihre Netzwerkverbindungen.

Einer der Vorteile dieses Ansatzes besteht darin, dass Sie Folgendes verwenden können blocks um das gewünschte Verhalten bei Änderungen des Erreichbarkeitsstatus festzulegen. Angenommen, ich habe eine Singleton-Unterklasse von AFHTTPClient (wie in den "Anmerkungen zur Unterklassifizierung" auf AFNetworking-Dokumente ) genannt BKHTTPClient würde ich so etwas tun wie:

BKHTTPClient *httpClient = [BKHTTPClient sharedClient];
[httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
    if (status == AFNetworkReachabilityStatusNotReachable) 
    {
    // Not reachable
    }
    else
    {
        // Reachable
    }
}];

Sie können auch gezielt nach Wi-Fi- oder WLAN-Verbindungen suchen, indem Sie den AFNetworkReachabilityStatusReachableViaWWAN y AFNetworkReachabilityStatusReachableViaWiFi Enums ( mehr hier ).

19voto

Felixyz Punkte 18963

Ich habe den Code in diese Diskussion und es scheint gut zu funktionieren (lesen Sie die ganz thread!).

Ich habe nicht alle denkbaren Verbindungsarten (wie Ad-hoc-Wi-Fi) ausführlich getestet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X