web-dev-qa-db-fra.com

Scénario AFNetworking et No Internet Connection

J'utilise AFNetworking dans mon application pour chaque demande (comme une connexion, obtenir des données à partir d'une URL, etc.).

Prenons l'exemple suivant: un utilisateur clique sur le bouton de connexion et il n'y a pas de connexion, comment afficher instantanément une UIAlertView qui dit l'erreur? La méthode only consiste à attendre le délai de requête et à exécuter le bloc failure? N'y a-t-il pas moyen de vérifier instantanément s'il existe une connexion ou non?

Merci!

23
Fred Collins

Depuis la version 0.9, AFHTTPClient a en réalité une accessibilité au réseau intégrée (une interface plus simple avec le code d'accessibilité susmentionné d'Apple). Incluez simplement le framework SystemConfiguration et utilisez -setReachabilityStatusChangeBlock: pour spécifier une réponse lorsque l'état d'accessibilité change.

57
mattt

Avec AFNetworking, ce sont les étapes à suivre pour pouvoir profiter de setReachabilityStatusChangeBlock: après avoir ajouté les classes AFNetworing -

  1. Ajoutez SystemConfiguration.framework à votre projet
  2. Dans le fichier pch, ajoutez #import <SystemConfiguration/SystemConfiguration.h>
  3. En supposant que vous ayez une sous-classe de AFHTTPClient dans cette sous-classe, ajoutez ci-dessous les lignes de code dans la fonction init -
 [self setReachabilityStatusChangeBlock: ^ (état AFNetworkReachabilityStatus) {
 NSLog (@ "modifié% d", statut); 
 // votre code ici 
}]; 
28
Yogesh Agarwal

J'utilise laAFNetworkingOperationDidFinishNotification. Chaque fois qu'une demande http échouera, l'alerte apparaîtra et informera l'utilisateur 

- (void)addNetworkObserver
{
   [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(HTTPOperationDidFinish:) 
                                                name:AFNetworkingOperationDidFinishNotification 
                                              object:nil];
}

- (void)HTTPOperationDidFinish:(NSNotification *)notification 
{
   AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object];
   if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
       return;
   }
   if (operation.error) {
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error"
                                                       message:@"Missing connection to the internet"
                                                      delegate:nil
                                             cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];

       [alert show];
   }
}
2
carmen_munich

Vous pouvez peut-être utiliser "Accessibilité" pour déterminer si le périphérique est connecté au réseau. Voici le lien vers le document Apple Doc. : Accessibilité

Par exemple :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
  //Your UIAlertView
}
2
bs7

Que diriez-vous d'utiliser (Atteignabilité? } _

Vous pouvez vérifier si vous avez une raison plausible d'essayer une connexion avant de le faire.

On dirait que le exemple de projet Apple pour l'accessibilité montre comment obtenir un statut initial.

0
Adam Eberbach