Определение доступности интернета на iPhone? - PullRequest
1 голос
/ 12 апреля 2009

Я использую NSURLConnection в приложении для iPhone следующим образом:

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: request delegate: self];

Запрос настроен и работает должным образом, но я хочу предоставить пользователю сообщение "соединение недоступно", если соединение недоступно. Есть ли быстрый способ определить, доступно ли интернет-соединение на iPhone?

Было бы так же просто, как добавить следующее после запуска NSURLConnection:

if (conn) { // do normal processing } else { // display connection not available message }

Заранее спасибо, Ben

Ответы [ 2 ]

5 голосов
/ 12 апреля 2009

это работает для меня и взято из проекта apple seismic xml:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}
1 голос
/ 13 апреля 2009

Радж, этот код работает, но не всегда создает желаемый результат.

Способ работы стека TCP на iPhone сильно отличается от того, что следовало ожидать. С кодом «Reachability» иногда может быть установлено сетевое соединение, но оно не будет надежно обнаружено. Однако запуск MobileSafari и повторная попытка проверить подключение с помощью кода «Reachability» (код Радж) приведет к правильному результату.

Способ, который я нашел наиболее эффективным при определении сетевого подключения, - это запуск проверки NSURLConnection при загрузке приложения в отдельном потоке. Сделайте звонок на URL, который, как вы знаете, вернет что-то вроде «Да» (то есть файл HTML на вашем сервере или что-то в этом роде). Затем убедитесь, что возвращаемый результат равен статическому тексту. Таким образом, вы знаете, что стек NSURLConnection работает правильно, в отличие от кода «Reachability», который работает не совсем согласованно.

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