SCNetworkReachabilityGetFlags возвращает 0, даже если беспроводная связь доступна - PullRequest
4 голосов
/ 03 февраля 2011

У меня есть приложение, которое использует код доступности Apple.Когда я выхожу из приложения, включаю режим полета, возвращаюсь в приложение, я правильно получаю сообщение о том, что соединение недоступно.Если я вернусь, выключу режим полета и вернусь в приложение, я все равно получу сообщение о том, что соединение недоступно.Конкретный код проблемы таков:

NetworkStatus status = kNotReachable;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
    status = [self networkStatusForFlags: flags];
    return status;
}

Я попал внутрь оператора if, а флаги заканчиваются на 0 (kSCNetworkReachabilityFlagsTransientConnection)Что именно это значит?Кто-нибудь испытал это, и кто-нибудь знает обходной путь или исправить?Я играл с ним часами ...

Ответы [ 4 ]

10 голосов
/ 06 января 2012

Я обнаружил, что это вызвано предоставлением имени хоста с указателем протокола (например, http://hostname вместо просто hostname). Попробуйте указать только имя хоста, чтобы увидеть, решит ли это вашу проблему.

2 голосов
/ 17 января 2013

После вызова SCNetworkReachabilityGetFlags важно также вызвать CFRelease, чтобы избежать кэширования состояния сети. Смотрите мою реализацию ниже:

SCNetworkReachabilityRef достижимость = SCNetworkReachabilityCreateWithName (NULL, host_name);

SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
bool isAvailable = success && (flags & kSCNetworkFlagsReachable) &&
!(flags & kSCNetworkFlagsConnectionRequired);
CFRelease(reachability);
if (isAvailable) {
    NSLog(@"Host is reachable: %d", flags);
    return true;
}else{
    NSLog(@"Host is unreachable");
    return false;
}
0 голосов
/ 01 августа 2017

У меня была такая же проблема, но это происходило только во время тестирования на симуляторе. Я провел 2 дня, сходя с ума, а затем я проверил на устройстве, и это работало как шарм! Понятия не имею, почему ...

0 голосов
/ 16 мая 2011

Если флаги были получены и они в итоге равны 0, как вы видели, это означает, что включен режим полета. Однако результаты этой проверки, похоже, кэшируются, по крайней мере, в течение короткого времени. Попробуйте это: выйдите из приложения, выключите режим полета, перейдите на сайт в Mobile Safari и вернитесь в свое приложение. Это может сделать недействительным кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...