Lorsque mon application se lance, je vérifie l'accessibilité parce que j'ai besoin d'une connexion Internet immédiate. Mon problème, cependant, est qu'il semble qu'il n'y ait pas de confirmation immédiate pour le NetworkStatus
, ce qui signifie que juste après la configuration de Reachability, je vérifie s'il y a une connexion, et il retourne qu'il n'y en a pas, que je sois en fait sur WiFi/3G, ou avez éteint la radio.Besoin d'aide avec Reachability (2.0.3ddg)
Je confirme que je suis en fait d'obtenir une connexion Internet, car instantanément après applicationDidFinishLaunching, il y a une notification qui se connecte ensuite « ReachableViaWiFi » ..
Qu'est-ce que je fais mal? Pourquoi ne confirme-t-il pas immédiatement une connexion Internet valide?
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NetworkStatus netStatus = [hostReach currentReachabilityStatus];
if (netStatus == NotReachable) {
ErrorViewController *errorViewController = [[ErrorViewController alloc] initWithNibName:@"ErrorView" bundle:[NSBundle mainBundle]];
[tabBarController.view removeFromSuperview];
[window addSubview:[errorViewController view]];
return;
}
}
-(void)setupReachability {
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name:kReachabilityChangedNotification object: nil];
hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
[hostReach startNotifier];
}
-(void)reachabilityChanged:(NSNotification *)notification {
Reachability* curReach = [notification object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus netStatus = [curReach currentReachabilityStatus];
BOOL connectionRequired = [curReach connectionRequired];
switch (netStatus)
{
case NotReachable:
{
[[NSUserDefaults standardUserDefaults] setInteger:kNOTREACHABLE forKey:kREACHABILITYSTATUS];
NSLog(@"NotReachable");
connectionRequired = NO;
break;
}
case ReachableViaWWAN:
{
[[NSUserDefaults standardUserDefaults] setInteger:kREACHABLEVIAWWAN forKey:kREACHABILITYSTATUS];
NSLog(@"ReachableViaWWAN");
break;
}
case ReachableViaWiFi:
{
[[NSUserDefaults standardUserDefaults] setInteger:kNOTREACHABLE forKey:kREACHABILITYSTATUS];
NSLog(@"ReachableViaWiFi");
break;
}
}
}
Je peux ajouter une confirmation que Apple a déclaré que l'accessibilité n'est pas une vérification pré-vol. Si vous voulez que cela fonctionne le plus rapidement possible, essayez d'ouvrir une URL de confirmation dès le lancement de l'application, qui devrait permettre à Reachability de déclencher une notification sur l'état de la connexion. –
Ne serais-je pas en mesure de définir quelque chose comme "isConnectionRequired", ce qui oblige à une vérification du réseau? – runmad