#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;
}