Как обнаружить изменения в сети с помощью Reachability? - PullRequest
8 голосов
/ 11 ноября 2011

Я сейчас проверяю сетевое соединение на viewDidLoad, используя это:

-(BOOL)reachable {
    ReachabilityDRC *r = [ReachabilityDRC reachabilityWithHostName:@"google.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
        return NO;
    }
    return YES;
}

Но я также хочу получать уведомления, если происходит изменение сети, например, отказ от Wi-Fi или возврат Wi-Fi, поэтому я могу внести соответствующие изменения.

Как я могу настроить свой метод, чтобы сделать что-то подобное?

Ответы [ 3 ]

9 голосов
/ 26 августа 2014

1 - добавьте SystemConfiguration.framework к вашему проекту.

2 - Скачать следующие файлы из GitHub

Reachability.h
Reachability.m

3- Добавьте эти файлы в свои проекты

4 - добавить @class Reachability; в YourViewController.h

#import <UIKit/UIKit.h>

@class Reachability;

5 - добавить переменную Reachability* internetReachable; в YourViewController.h

#import <UIKit/UIKit.h>

@class Reachability;

@interface YourViewController : UIViewController {
    Reachability* internetReachable;
}

6 - добавить Reachability.h в YourViewController.m

#import "YourViewController.h"
#import "Reachability.h"

7 - добавить следующие строки в -(void)ViewDidLoad в YourViewController.m

-(void)ViewDidLoad {
    [[NSNotificationCenter defaultCenter] 
                       addObserver:self 
                       selector:@selector(checkNetworkStatus:) 
                       name:kReachabilityChangedNotification 
                       object:nil];

    internetReachable = [Reachability reachabilityForInternetConnection];
    [internetReachable startNotifier];
}

8 - добавить следующую функцию после -(void)viewDidLoad

-(void) checkNetworkStatus:(NSNotification *)notice
{
    // called after network status changes
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            break;
        }
    }
}

Теперь при каждой смене интернет-соединения вы будете видеть вход в консоль.

6 голосов
/ 12 ноября 2011

Другое возможное решение - добавить NS-уведомление в «application didfinishlaunching»:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkForReachability) name:kReachabilityChangedNotification object:nil];

и в методе checkForReachability сделайте это:

    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];

    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

    if(remoteHostStatus == NotReachable) {
        //Do something
    }
     else if (remoteHostStatus == ReachableViaWiFi) {
    // Do something
 }
    else{

// Else do something else
}
0 голосов
/ 12 ноября 2011

Я использовал отличное расширение класса Reachability, которое разработала Donoho Design Group.Он имеет уведомления, которые позволяют вам получать уведомления при изменении состояния сети.

http://blog.ddg.com/?p=24

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...