webentwicklung-frage-antwort-db.com.de

Überprüfung der Erreichbarkeit des iPhone

Ich habe mehrere Codebeispiele gefunden, um das zu tun, was ich will (auf Erreichbarkeit prüfen), aber keines davon scheint genau genug zu sein, um mir von Nutzen zu sein. Ich kann nicht herausfinden, warum das nicht Nizza spielen will.

Ich habe die Erreichbarkeit.h/m in meinem Projekt, das mache ich

#import <SystemConfiguration/SystemConfiguration.h>

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

#import "Reachability.h"

oben auf der .m, 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, wo ich das aktivieren muss, was ich tun möchte, unabhängig davon, ob ich wissen möchte, was ich tun möchte oder nicht. (So ​​frustrierend)

Update: Das ist was los ist. Dies ist in meinem Viewcontroller, den ich habe

#import <SystemConfiguration/SystemConfiguration.h>

und

#import "Reachability.h"

eingerichtet mit. Dies ist bei weitem mein am wenigsten bevorzugter Teil der Programmierung. reachability problems
(Quelle: sneakyness.com )


FWIW, wir haben dies nie in unserem Code implementiert. Die beiden Funktionen, die einen Internetzugang erforderten (Teilnahme am Gewinnspiel und Kauf der DVD), waren keine Hauptfunktionen. Sonst ist kein Internetzugang erforderlich.

Anstatt weiteren Code hinzuzufügen, setzen wir den Hintergrund beider Internetansichten auf einen Hinweis, der den Benutzern mitteilt, dass sie mit dem Internet verbunden sein müssen, um diese Funktion nutzen zu können. Es war im Thema mit dem Rest der Benutzeroberfläche der Anwendung und wurde gut/geschmackvoll gemacht. Während des Genehmigungsprozesses haben sie nichts darüber gesagt, aber wir haben einen persönlichen Anruf erhalten, um zu bestätigen, dass wir Gegenstände verschenken, die sich tatsächlich auf den Film beziehen. Gemäß ihrer normalerweise vagen Vereinbarung dürfen Sie ansonsten kein Gewinnspiel haben.

Ich würde auch denken, dass dies strenger an ihrer Ideologie "nur Dinge verwenden, wenn man sie unbedingt braucht" festhält.

Hier ist der iTunes-Link zur Anwendung EvoScanner.

40
Sneakyness

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

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

Fügen Sie Ihrem Projekt die Dateien .h und .m hinzu.

Update: Sie haben festgestellt, dass Sie erreichbar sind. Anhand der neuesten Version kann ich jedoch feststellen, warum die von Ihnen aufgelisteten Fehler aufgetreten sind. Sie haben die API geändert und verwenden wahrscheinlich Beispielcode, den Sie woanders gefunden haben. Versuchen:

in .h Datei:

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

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

in .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"); }
}
[reachability setHostName:@"http://www.google.com"];

Beachtung! Ich habe das Problem festgestellt, dass es immer "NotReachable" ist, wenn das Präfix http: // verwendet wird.

Raphael

28
Raphael Schaad

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"); }
7
nikoz

Haben Sie irgendwo den folgenden Code?

[reachability startNotifier];

wenn Ihr Erreichbarkeitscode aus dem Beispiel von Apple stammt, müssen Sie dies tun, bevor Statusaktualisierungen an Sie gemeldet werden können.

3
Kevlar