iOS - проверка подключения с классом Reachability не выполнена. (ReachabilityWithHostName:)

Я написал средство проверки соединения с использованием класса Reachability от Apple "reachabilityWithHostName: метод". Вот мой код

-(BOOL)checkConnection{
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.example.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if (remoteHostStatus != NotReachable) {
    return YES;
}
else {return NO;}
}

ТАК вот варианты использования:

  • если у меня есть Wi-Fi соединение **: возвращает ДА, как и ожидалось.
  • Если у меня есть сотовая связь: возвращает ДА, как и ожидалось.
  • Если сотовая связь и Wi-Fi отключены: возвращает NO, как ожидалось.
  • Если у меня есть Wi-Fi соединение; но кабель DSL отключен (поэтому хост не должен быть доступен, интернет-соединение недоступно): возвращает YES, и это неожиданно.
  • Также, если сотовая связь включена, но в моей текущей позиции у меня нет сигнала: возвращает ДА, и это неожиданно.

Как я могу решить эти неожиданные результаты? Спасибо.

1 ответ

Решение

С помощью @Martin Koles я добавил html-файл на сервер. Он имеет только случайное значение внутри. Сейчас я проверяю достижимость. Если сервер доступен, я пытаюсь получить значение из файла HTML. Чем, если бы я мог получить значение, возвращающее ДА. Если я не смог (значение serverValue должно быть равно нулю), возвращая NO..

-(BOOL)checkConnection{
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.izmirmobil.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if (remoteHostStatus != NotReachable) {
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/getAValue.html"];
    NSError *errr = nil;
    NSStringEncoding enc;
    NSString *serverValue = [[NSString alloc] initWithContentsOfURL:url usedEncoding:&enc error:&errr];
    if(serverValue)return YES;
    else return NO;

}
else {return NO;}
}
Другие вопросы по тегам