2014-09-26 2 views
1

Я использую достижимость для обнаружения изменения сети. в первый раз его хорошо с Wi-Fi доступны. но потом я выключить WiFi включите, он всегда возвращать NotReachдостижимость всегда возвращение NotReach

Reachability *internetChecker; 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(myMethod:) name:kReachabilityChangedNotification object:nil]; 
internetChecker = [Reachability reachabilityWithHostName:@"www.24h.com.vn"]; 
[internetChecker startNotifier]; 

в MyMethod:

NetworkStatus status = [internetChecker currentReachabilityStatus]; 
switch (status) { 
    case NotReachable: 
    { 
    NSLog(@"no wifi"); 
     break; 
    } 
default: 
{ 
    NSLog(@"wifi"); 
    break; 
} 

}

+0

тестируют на тренажере? В симуляторе он не работает правильно. – damithH

+0

@damithH да. Я использую симулятор и не могу перезагрузить данные при подключении Wi-Fi. – user3867224

ответ

0

Есть ли у вас отдельные возможности Доступность для Интернета и хоста?

@property (nonatomic) Reachability *internetReachability; 
@property (nonatomic) Reachability *hostReachability; 

Тогда это сделать:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:kReachabilityChangedNotification object:nil]; 

self.internetReachability = [Reachability reachabilityForInternetConnection]; 
[self.internetReachability startNotifier]; 
[self updateInterfaceWithReachability:self.internetReachability]; 

self.hostReachability = [Reachability reachabilityWithHostName:@"www.24h.com.vn"]; 
[self.hostReachability startNotifier]; 
[self updateInterfaceWithReachability:self.hostReachability]; 

Тогда MyMethod:

- (void)myMethod:(NSNotification *)note 
{ 
    Reachability* curReach = [note object]; 
    NSParameterAssert([curReach isKindOfClass:[Reachability class]]); 
    [self updateInterfaceWithReachability:curReach]; 
} 

И updateInterfaceWithReachability:

- (void)updateInterfaceWithReachability:(Reachability *)reachability { 
    NetworkStatus netStatus = [reachability currentReachabilityStatus]; 

    if (reachability == self.internetReachability) { 
     switch (netStatus) { 
      case NotReachable: 
       NSLog(@"no internet"); 
       break; 
      case ReachableViaWWAN: 
      case ReachableViaWiFi: 
       NSLog(@"with internet"); 
       break; 
     } 
    } 

    if (reachability == self.hostReachability) { 
     switch (netStatus) { 
      case NotReachable: 
       NSLog(@"www.24h.com.vn unavailable"); 
       break; 
      case ReachableViaWWAN: 
      case ReachableViaWiFi: 
       NSLog(@"www.24h.com.vn available"); 
       break; 
     } 
    } 
0

Попробуйте ниже решения

+ (BOOL)checkInternetConnection 
{ 
    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 
    if (remoteHostStatus == NotReachable) 
    { 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

вы должны изменить эта линия

Reachability * internetChecker = [Reachability reachabilityForInternetConnection]; 

Надеюсь, это поможет вам!

0

сделано! я не знаю, как, но его, кажется, центр уведомлений обнаруживает только при смене сети. Когда он замечает, что статус все еще NotReachable. Поэтому я проверяю сеть после задержки 2 с. Это работает!

Смежные вопросы