J'utilise la classe Reachability
fournie par Apple dans mon projet iOS pour here. J'appelle sa méthode currentReachabilityStatus
toujours avant d'essayer d'appeler mes propres services Web REST:Exception EXC_BAD_ACCESS à la classe d'accessibilité
- (NetworkStatus)currentReachabilityStatus
{
NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef");
NetworkStatus returnValue = NotReachable;
SCNetworkReachabilityFlags flags;
if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
{
if (_alwaysReturnLocalWiFiStatus)
{
returnValue = [self localWiFiStatusForFlags:flags];
}
else
{
returnValue = [self networkStatusForFlags:flags];
}
}
return returnValue;
}
À son tour, j'appelle cette méthode d'une classe personnalisée j'ai fait pour des raisons pratiques:
+ (BOOL)checkNetStatus
{
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reach currentReachabilityStatus];
return [self boolFromStatus:status];
}
J'effectue des tests sur un iPhone, en activant le mode de vol dans ses paramètres, puis lorsque l'application est de nouveau au premier plan, cette méthode est appelée plusieurs fois (mon application réessaye d'appeler les services Web si elle n'est pas accessible accessible) et enfin je reçois un EXC_BAD_ACCESS
exception à la ligne if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
, et l'application se bloque.
Je ne comprends pas exactement pourquoi, parce que currentReachabilityStatus
est appelé plusieurs fois avant que je reçoive l'exception et le crash, est-ce parce qu'il est appelé beaucoup de fois et trop vite? Comment pourrais-je résoudre ceci?
J'ai besoin d'aide, merci d'avance.
EDIT: chaque fois que je vais appeler mes services RESTful, je fais quelque chose comme ceci:
- (void)callWebService
{
if ([MyReachabilityManager checkNetStatus]) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
MyServiceWrapper *requestService = [[MyServiceWrapper alloc] initWithServiceUrl];
[requestService queryService];
}
else {
[self keepRequestingMyService]; // this calls this method again until a timeout
}
}
Merci. Dans mon cas, le '_reachabilityRef' n'est pas nul au moment où j'obtiens l'erreur ... Je serais quelque chose lié à la gestion de la mémoire, en tenant compte du fait que je suis findind lorsque j'appelle la méthode un grand nombre de fois dans un rangée en raison du manque d'accessibilité, mais je ne sais pas comment le gérer ... – AppsDev
Salut @Midhun MP pouvez-vous s'il vous plaît ajouter votre méthode. Je suis également confronté au même problème. J'ai essayé mais ça n'a pas marché. Veuillez ajouter cette condition dans votre réponse. –