2013-10-03 7 views
2

Я использую класс 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) и, наконец, получил изменение достижимости (нет сети). Все время, когда сеть была полностью недоступна.

Я что-то не так? Неправильное толкование/Непонимание использования достижимости? Или, если нет, то как в мире люди справляются с этими условиями?

ответ

1

Поведение, которое вы описываете, является именно тем, как я ожидаю, что API-интерфейс Reachability будет вести себя. Его в основном способ просто узнать, подключено ли ваше устройство через Wi-Fi, сотовая связь или вообще отсутствует. Он не указывает на уровень сигнала или сетевого подключения.

+0

Это похоже на случай. Но какова «лучшая практика» для обработки тех промежуточных условий, в которых «Достижимость» говорит, что вы подключены, но соединение по сути бесполезно? Тайм-аут на стороне клиента, или есть лучший способ? – Raconteur

+0

Я не знаю, есть ли что-то вроде «лучшей практики» для этого, но я использовал тайм-ауты на стороне клиента в прошлом. –

+0

Спасибо Джонатан. Я ценю вход. – Raconteur

Смежные вопросы