Brauchen Sie Hilfe bei der Erreichbarkeit (2.0.3 ddg)
Wenn meine app startet, überprüfe ich für die Erreichbarkeit, denn ich brauche eine sofortige Verbindung zum internet. Mein problem, obwohl, ist, dass es scheint, es gibt keine unmittelbare Bestätigung für die NetworkStatus
, was bedeutet, dass direkt nach der Erreichbarkeit ist das setup, das ich überprüfen, ob ein Zusammenhang besteht, und es gibt, das gibt es nicht, unabhängig davon, ob in der Tat bin ich auf WiFi/3G, oder haben sich das radio aus.
Kann ich bestätigen, dass ich bin in der Tat immer eine Internet-Verbindung, da sofort nach der applicationDidFinishLaunching, gibt es eine Meldung, die meldet sich dann "ReachableViaWiFi"..
Was mache ich falsch? Warum ist es nicht zu bestätigen, eine gültige Internet-Verbindung sofort?
- (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;
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, also nach dem Versuch ein paar Dinge aus mir, die ich eigentlich zum laufen bekommen, indem man eine zusätzliche Zeile code:
Die Erreichbarkeit Beispielcode bietet Ihnen mit asynchronen callbacks/Benachrichtigungen, die Sie darüber informieren, wie/Wann die telefonische Erreichbarkeit hat sich geändert. Um Ihren code zu Bearbeiten, sollten Sie ändern Sie Ihren code wie folgt:
Dann in Ihren Rückruf, wenn Sie die Benachrichtigung erhalten Sie, reagieren wie für Ihre Anwendung erforderlich.
In anderen Worten, Sie können nicht überprüfen Sie sofort für die Netzwerk-status in
applicationDidFinishLaunching()
. Wenn Sie das tun wollen, dann müssen Sie eine synchrone/blockierende Methode, zum Beispiel können Sie den code in meiner Antwort auf diese Frage.Machen Sie hostReach Klasse-level variable.