Немедленный сбой на устройстве с помощью SCNetworkReachabilityGetFlags с приложением iOS - PullRequest
3 голосов
/ 29 апреля 2011

Я использую SCNetworkReachabilityCreateWithName & SCNetworkReachabilityGetFlags для проверки доступности сети на моем устройстве iOS. Когда я запускаю приложение в симуляторе или запускаю его на устройстве, но подключаю к отладчику, все совершенно круто. Однако, когда я запускаю приложение на тестовом устройстве, но отсоединяюсь от отладчика, у меня происходит сбой. [РЕДАКТИРОВАТЬ: только что понял, я не указал, где: в вызове SCNetworkReachabilityGetFlags] Странно, это не происходит, когда я запускаю проверку в первый раз. Это происходит на второй проверке. И использование try / catch абсолютно ничего не делает.

Крушение происходит немедленно. Там нет задержки, пока происходит асинхронный опрос, и приложение просто тайм-аут. Это немедленно.

Это полностью истекло. Я вообще не понимаю, почему это происходит. Я готовлюсь пойти на конференцию, чтобы продемонстрировать приложение и сопровождающее его веб-приложение. Я планировал пройтись по полу, чтобы показать это. Но теперь я в основном ограничен привязкой своего iPhone / iPod к компьютеру в кабинке.

Есть идеи? Какие-нибудь обходные пути, которые не держат меня подключенным к компьютеру? И какие-нибудь долгосрочные решения, которые решают эту проблему? Я использую этот метод для проверки доступности сети каждый раз, когда выполняю какие-либо действия в сети. Я синхронизирую свои данные с облаком и запускаю эту проверку каждый раз, когда происходит синхронизация. Я чувствую, что это необходимо для информирования пользователя в случае внезапного обрыва сетевого подключения.

Помощь ????

Вот фрагмент кода.

+ (BOOL) networkConnected {
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
BOOL retrievedFlags = NO;

BOOL reachable = NO;

netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [EXTERNAL_HOST UTF8String]);

@try {
    if(netReachability) {
        retrievedFlags = SCNetworkReachabilityGetFlags(netReachability, &flags);
        CFRelease(netReachability);
    }

    if(!retrievedFlags || !flags)
        reachable = NO;
    else
        reachable = YES;
} @catch (NSException *ex) {
    reachable = NO;
} @finally {
    return reachable;
}

}

...