web-dev-qa-db-fra.com

Vérification de l'accessibilité de l'iPhone

J'ai trouvé plusieurs exemples de code pour faire ce que je veux (vérifier l'accessibilité), mais rien ne semble être suffisamment précis pour être utile pour moi. Je ne peux pas comprendre pourquoi cela ne veut pas jouer à Nice.

J'ai l'accessibilité.h/m dans mon projet, je fais

#import <SystemConfiguration/SystemConfiguration.h>

Et j'ai le cadre ajouté. J'ai aussi:

#import "Reachability.h"

en haut du .m dans lequel j'essaie d'utiliser l'accessibilité.

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

Cela me pose toutes sortes de problèmes. Qu'est-ce que je fais mal? Je suis un bon codeur, j'ai juste du mal à comprendre ce qui doit être mis où activer ce que je veux faire, peu importe si je veux savoir ce que je veux faire ou non. (Tellement frustrant)

Mise à jour: c'est ce qui se passe. C'est dans mon viewcontroller, que j'ai le

#import <SystemConfiguration/SystemConfiguration.h>

et

#import "Reachability.h"

mis en place avec. C'est de loin ma partie préférée de la programmation . reachability problems
(source: sneakyness.com )


FWIW, nous n'avons jamais fini par implémenter cela dans notre code. Les deux fonctionnalités nécessitant un accès à Internet (participation au tirage au sort et achat du DVD) n'étaient pas des fonctionnalités principales. Rien d'autre ne nécessitait un accès Internet.

Au lieu d'ajouter plus de code, nous avons simplement défini l'arrière-plan des deux vues Internet pour indiquer aux utilisateurs qu'ils doivent être connectés à Internet pour utiliser cette fonctionnalité. Il était dans le thème du reste de l'interface de l'application, et a été bien fait/avec goût. Ils n'ont rien dit à ce sujet pendant le processus d'approbation, mais nous avons reçu un appel téléphonique personnel pour vérifier que nous distribuions des articles qui se rapportaient réellement au film. Selon leur accord généralement vague, vous n'êtes pas autorisé à avoir des tirages au sort autrement.

Je pense également que cela adhère plus strictement à leur idéologie "n'utilisez que des choses si vous en avez absolument besoin".

Voici le lien iTunes vers l'application, EvoScanner.

40
Sneakyness

À partir de votre capture d'écran, il semble que l'accessibilité ne soit pas ajoutée à votre projet. Vous devez télécharger l'accessibilité d'Apple:

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

Et ajoutez les fichiers .h et .m à votre projet.

Mise à jour: vous avez remarqué que vous disposez de l'accessibilité. Mais en regardant la version la plus récente, je peux voir pourquoi vous avez les erreurs que vous avez répertoriées - elles ont changé l'API et vous utilisez probablement un exemple de code que vous avez trouvé ailleurs. Essayer:

dans le fichier .h:

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

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

dans le fichier .m:

[[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"];

Attention! J'ai rencontré le problème qu'il est toujours "NotReachable" si le préfixe http: // est utilisé.

Raphael

28
Raphael Schaad

Voici le bon code car il fonctionne pour moi aujourd'hui !!!

[[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

Avez-vous le code suivant quelque part?

[reachability startNotifier];

si votre code d'accessibilité provient de l'exemple d'Apple, vous devez le faire avant qu'il puisse commencer à vous signaler les mises à jour de statut.

3
Kevlar