0

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

Répondre

0

Quelque chose de semblable est arrivé à moi, un de mes applications lors du passage écrasements en mode Avion et au Wifi fréquemment (arrivé si le Wi-Fi a une force de signal faible).

Dans mon cas, l'accident est causé par le NSAssert, le _reachabilityRef était null, donc la condition assert échouait:

NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef"); 

Je viens enlevé que et re-écrit cette méthode en ajoutant un contrôle supplémentaire null pour _reachabilityRef

+0

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

+0

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. –

0

J'ai eu le même: app SOMETIMES se bloque lors de la libération reachabilityRef. On dirait que cela devrait être NULL mais ce n'est pas le cas? enter image description here

Après avoir essayé je l'ai trouvé si j'ajouté quelque chose dans l'interface Reachability.h (il avait à l'origine rien):

@interface Reachability : NSObject{ 
    BOOL dummy; 
} 

il a cessé de s'écraser, pourriez-vous essayer et de faire rapport si elle aide? J'utilise XCode 7.1.1