Erreur réseau NSURLConnection
Bonjour ,
Dans mon appli, on récupère des données via un NSURLConnection asynchrone comme ceci:
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* error) {
// Récupération des données
}];
Le problème est que lorsque j'execute mon appli sur un appareil qui n'est pas connecté à internet, l'appli quitte au moment d'essayer de récupérer les données.
À la place j'aimerais afficher un message d'erreur et ne pas quitter. Ma question est sûrement débile mais comment fait-on ?
Je pense qu'il faut vérifier la connexion avec une fonction comme celle-ci et annuler la requête:
-(BOOL)isInternetAvail
{
BOOL bRet = FALSE;
const char *hostName = [@google.com cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkConnectionFlags flags = 0;
if (SCNetworkCheckReachabilityByName(hostName, &flags) && flags > 0)
{
if (flags == kSCNetworkFlagsReachable)
{
bRet = TRUE;
}
else
{
}
}
else
{
}
return bRet;
}
Cela est-il valide ?
Merci beaucoup d'avance,
Flow
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu peux effectivement faire ca, une autre approche serais faire la requête et si une erreur est retourne tu peux afficher l'erreur a ce moment la. Comme tu auras sans doute d'autres erreurs et meme si SCNetworkConnection retourne qu'il y a une connection internet, il est toujours possible que la requête ne passe pas.
Ce que je fais dans mes applications:
- j'utilise Reachability (https://developer.apple.com/library/IOS/samplecode/Reachability/Introduction/Intro.html) et bloque toute requête jusqu'a ce que je reçoive la notification que le réseau est disponible
- je regarde l'erreur qui revient dans le paramètre response et je la gère a ce moment la
Olivier
Merci de ta réponse.
Donc pour Reachability, il faudrait faire comme ça:
Puis on reçois la notification avec ça:
Mais par contre je vois pas comment regarder l'erreur et bloquer la requête en attendant....
Flow
Salut,
Tout est dans la doc
https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/doc/uid/20001697-SW10
Si ton le data dans le completionHandler est nil donc y a un problème et parmi ces problèmes il peut y avoir que le device n'est pas connecté à internet. Donc ce cas il faut checker l'objet NSError retourné avec le code et le domain approprié et afficher le message approprié ( pas de connexion, time out, autre problème...).
Un truc du genre :
Lien vers les code erreur :
https://developer.apple.com/library/ios/documentation/cocoa/reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html
C'est aussi simple que ça samir ?
Merci de ton aide ::) !
EDIT: Pour les interessés, ce code fonctionne parfaitement ! Merci encore à samir !