Я использую класс Reachability от Apple и написал простое тестовое приложение, чтобы просто обработать события, которые он набирает.Достижимость и уровень сигнала
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[self initializeNetworkReachability];
...
}
#pragma mark - Network Reachability/Connection methods
- (void)initializeNetworkReachability {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkConnection:) name:kReachabilityChangedNotification object:nil];
internetAvailable = [Reachability reachabilityForInternetConnection];
[internetAvailable startNotifier];
[self checkConnection:nil];
}
- (void)checkConnection:(NSNotification *)notification {
NetworkStatus internetStatus = [internetAvailable currentReachabilityStatus];
switch (internetStatus) {
case NotReachable:
_isConnectedToInternet = NO;
break;
case ReachableViaWiFi:
_isConnectedToInternet = YES;
break;
case ReachableViaWWAN:
_isConnectedToInternet = YES;
break;
default:
_isConnectedToInternet = NO;
break;
}
[self connectionAchieved:_isConnectedToInternet];
}
- (void)connectionAchieved:(BOOL)achieved {
_isConnectedToInternet = achieved;
}
Все довольно простые ваниль ... но здесь лежит руб. Если я пойду в то место, где я знаю, что моя связь совершенно бесполезна (место на улице недалеко от моего офисного здания), я не получаю уведомления о достижении сети. Однако, если я открываю Safari и просматриваю веб-сайт, невозможно достичь и просто зависать, пытаясь загрузить страницу.
Я зашел так далеко, как блуждал по улице, наблюдая за индикатором WiFi и силой сотового сигнала, который изменился, но у меня никогда не было сигнала от достижимости.
Наконец, я вошел в магазин, подошел к самой спине и наблюдал, как WiFi переключается на сотовый 1x (я на iPhone 5) и, наконец, получил изменение достижимости (нет сети). Все время, когда сеть была полностью недоступна.
Я что-то не так? Неправильное толкование/Непонимание использования достижимости? Или, если нет, то как в мире люди справляются с этими условиями?
Это похоже на случай. Но какова «лучшая практика» для обработки тех промежуточных условий, в которых «Достижимость» говорит, что вы подключены, но соединение по сути бесполезно? Тайм-аут на стороне клиента, или есть лучший способ? – Raconteur
Я не знаю, есть ли что-то вроде «лучшей практики» для этого, но я использовал тайм-ауты на стороне клиента в прошлом. –
Спасибо Джонатан. Я ценю вход. – Raconteur