Frage

Ich habe mehrere Codebeispiele gefunden, die das tun, was ich will (Erreichbarkeit prüfen), aber keines davon scheint genau genug zu sein, um für mich von Nutzen zu sein.Ich kann nicht verstehen, warum das nicht gut funktionieren soll.

Ich habe die „reachability.h/m“ in meinem Projekt, die ich gerade mache

#import <SystemConfiguration/SystemConfiguration.h>

Und ich habe das Framework hinzugefügt.Ich habe auch:

#import "Reachability.h"

oben in der .m-Datei, in der ich versuche, die Erreichbarkeit zu nutzen.

Reachability* reachability = [Reachability sharedReachability];
[reachability setHostName:@"http://www.google.com"];    // set your host name here
NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); }

Das bereitet mir alle möglichen Probleme.Was mache ich falsch?Ich bin ein guter Programmierer, es fällt mir nur schwer, herauszufinden, was wo platziert werden muss, um das zu ermöglichen, was ich tun möchte, unabhängig davon, ob ich wissen möchte, was ich tun möchte oder nicht.(So ​​frustrierend)

Aktualisieren:Das ist es, was hier vor sich geht.Das ist in meinem Viewcontroller, den ich habe

#import <SystemConfiguration/SystemConfiguration.h>

Und

#import "Reachability.h"

eingerichtet mit.Das ist der Teil des Programmierens, der mir bei weitem am wenigsten gefällt.reachability problems
(Quelle: Sneakyness.com)


FWIW, wir haben das nie in unseren Code implementiert.Die beiden Funktionen, für die ein Internetzugang erforderlich war (Teilnahme am Gewinnspiel und Kauf der DVD), waren keine Hauptfunktionen.Nichts anderes erforderte einen Internetzugang.

Anstatt weiteren Code hinzuzufügen, haben wir einfach den Hintergrund beider Internetansichten mit einem Hinweis versehen, der den Benutzern mitteilt, dass sie mit dem Internet verbunden sein müssen, um diese Funktion nutzen zu können.Es passte thematisch zum Rest der Benutzeroberfläche der Anwendung und war gut/geschmackvoll gestaltet.Während des Genehmigungsverfahrens sagten sie nichts darüber, wir erhielten jedoch einen persönlichen Anruf, um zu bestätigen, dass wir Artikel verschenkten, die tatsächlich mit dem Film zu tun hatten.Gemäß ihrer meist vagen Vereinbarung ist es ansonsten nicht gestattet, Gewinnspiele durchzuführen.

Ich denke auch, dass dies auch strenger ihrer Idee entspricht, Dinge nur dann zu verwenden, wenn Sie sie unbedingt benötigen.

Hier ist der iTunes-Link zur Anwendung EvoScanner.

War es hilfreich?

Lösung

Aus Ihrem Screenshot geht hervor, dass Sie Reachability nicht zu Ihrem Projekt hinzugefügt haben.Sie müssen Reachability von Apple herunterladen:

https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html

Und fügen Sie sowohl .h- als auch .m-Dateien zu Ihrem Projekt hinzu.

Aktualisieren:Sie haben festgestellt, dass Sie über Erreichbarkeit verfügen.Aber wenn ich mir die neueste Version ansehe, kann ich erkennen, warum Sie die von Ihnen aufgelisteten Fehler haben – sie haben die API geändert und Sie verwenden wahrscheinlich Beispielcode, den Sie woanders gefunden haben.Versuchen:

in der .h-Datei:

//import Reachability class
#import "Reachability.h"

// declare Reachability, you no longer have a singleton but manage instances
Reachability* reachability;

in der .m-Datei:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];

reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

 if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

.....

- (void) handleNetworkChange:(NSNotification *)notice
{

  NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

   if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }
}

Andere Tipps

[reachability setHostName:@"http://www.google.com"];

Aufmerksamkeit!Ich bin auf das Problem gestoßen, dass es immer „NotReachable“ ist, wenn das Präfix http:// verwendet wird.

Raphael

Hier ist der richtige Code, wie er heute bei mir funktioniert!!!

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil];

reachability = [Reachability reachabilityForInternetConnection];

[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

Haben Sie irgendwo den folgenden Code?

[reachability startNotifier];

Wenn Ihr Erreichbarkeitscode aus dem Beispiel von Apple stammt, müssen Sie dies tun, bevor er Ihnen Statusaktualisierungen melden kann.

ändere das

reachability = [Reachability reachabilityForInternetConnection];

dazu

reachability = [[Reachability reachabilityForInternetConnection] retain];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top