Определение того, когда пограничное соединение возвращается после отключения на iPhone

#iphone #cocoa-touch #networking #connection

Вопрос:

Я включил образец достижимости Apple в свой собственный проект, чтобы знать, есть ли у меня сетевое подключение — если у меня нет сетевого подключения, я не утруждаю себя отправкой и запросами. Я решил использовать реализацию уведомления о состоянии, потому что казалось проще обновлять доступность в фоновом режиме и немедленно получать текущие результаты, а не запускать синхронный запрос всякий раз, когда я хочу подключиться к сети.

Моя проблема в том, что я начинаю получать ложные негативы, когда в пограничной сети — телефон подключен, но приложение думает, что это не так. Насколько я понимаю, вы не получаете уведомления при пограничном соединении, поэтому я предполагаю, что в какой-то момент я потерял и восстановил соединение. Перезапуска приложения обычно достаточно, чтобы увидеть сетевое подключение.

Это не оптимальное решение, поэтому мне было интересно, сталкивался ли кто-нибудь еще с этой проблемой и имел ли какие-либо мысли о ее решении.

(Я не знаю, относится ли это также и к 3G; у меня iPhone первого поколения).

Ответ №1:

Уведомления о доступности также не казались мне надежными для обнаружения Wi-Fi. Поэтому я просто использую опрос вместо этого. Проверка каждые 5 секунд, кажется, не причиняет вреда.

 - (void) checkReachability {
    BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);

    // Do something...

    [self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}
 

Комментарии:

1. Спасибо, я планировал включить достижимость сегодня, так что вы, вероятно, сэкономили мне немного времени в будущем 🙂

2. эй, как мне использовать этот класс? Я добавил Достижимость. h и достижимость.m файл и возможность импорта. файл h в моем AppDelegate теперь, когда я помещаю ваш метод в свой AppDelegate, я получаю ошибки.

3. Код достижимости значительно изменился за последний год. Таким образом, приведенный выше код больше не будет работать.

Ответ №2:

В сети есть хороший пример достижимости. это работает удивительно хорошо: http://servin.com/iphone/iPhone-Network-Status.html

Но, видите ли, когда я пытаюсь использовать это по-своему, это просто взрывается.

Попытался реализовать это с помощью:

 NSString *sCellNetwork;     
 NSString *sNetworkReachable;  

if (flags amp; kSCNetworkFlagsReachable || flags amp; kSCNetworkReachabilityFlagsIsWWAN)

{do it} 

 else {
   Network fail alert; 
}