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!
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.
Avec AFNetworking
, ce sont les étapes à suivre pour pouvoir profiter de setReachabilityStatusChangeBlock:
après avoir ajouté les classes AFNetworing -
SystemConfiguration.framework
à votre projet#import <SystemConfiguration/SystemConfiguration.h>
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 }];
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];
}
}
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
}
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.