Подтвердить что ты не робот

Настройка доступности с помощью AFNetworking 2.0

Я пытаюсь настроить Reachability с помощью нового 2.0 AFNetworking.

В моем AppDelegate я инициализирую sharedManager.

// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];

Затем в соответствующем VC-методе я проверяю, есть ли isReachable:

// Double check with logging
if ([[AFNetworkReachabilityManager sharedManager] isReachable]) {
    NSLog(@"IS REACHABILE");
} else {
    NSLog(@"NOT REACHABLE");
}

В настоящее время это не работает, как ожидалось, в симуляторе, но я думаю, что это нужно будет тестировать на устройстве, а не на симуляторе.

Вопрос То, что я хотел бы сделать, - следить за связностью внутри VC. Поэтому я запускаю следующее в viewDidLoad:

// Start monitoring the internet connection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

Как мне зарегистрироваться для изменений? Что будет/будет вызываться после изменения сетевого подключения, я не вижу этого в документации.

4b9b3361

Ответ 2

У меня есть одноэлементный класс AFHTTPRequestOperationManager. В singleton есть метод:

+(void)connectedCompletionBlock:(void(^)(BOOL connected))block {

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    BOOL con = NO;
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));

    if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {

        con = YES;
    }

    if (block) {
        [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
        block(con);
    }

}];

}

Перед выполнением запроса вы вызываете этот метод, который возвращает блок, указывающий, доступен ли доступ в Интернет:

[TLPRequestManager connectedCompletionBlock:^(BOOL connected) {
    if (connected) {

       // Make a request

    }else{

        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Notice" message:@"Internet is not available." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];

        [alertView show];

    }

}];

Ответ 3

Я просто пережил ваш вопрос и все ответы. После этого я решил сделать все это один раз. Таким образом, в моем существующем проекте я просто включил AFNetworking через cocoa -pods, и вот решение, которое полностью укусит меня.

Решение. Прежде всего AFNetworkReachabilityManager - это одноэлементный класс. Вам не нужно выполнять инициализацию AppDelegate для sharedManager.

//[AFNetworkReachabilityManager sharedManager];

#import <AFNetworkReachabilityManager.h>

- (void)viewDidLoad {

//Starting the network monitoring process

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

//Checking the Internet connection...

[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){
    if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {

        UIAlertView *alertNetFound = [[UIAlertView alloc]initWithTitle:@"Network Found" message:@"Please Wait Until It is loading" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertNetFound show];

    }else{
        UIAlertView *alertNetNotFound = [[UIAlertView alloc]initWithTitle:@"No Internet" message:@"Please Check Your Internet Connection Honey" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertNetNotFound show];
    }
}];

Итак, в этом случае каждый раз, когда устройство подключается к сети, он сначала запускает процесс startMonitoring, после чего он каждый раз попадает в блок состояния и отображает предупреждение в соответствии со статусом.

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

Он даже работает с моим симулятором и Mac mini..

Спасибо

Надеюсь, что это помогло.

Ответ 4

Я использую это в делете приложения →

 func reachablityCode() {
        AFNetworkReachabilityManager.sharedManager()
        AFNetworkReachabilityManager.sharedManager().startMonitoring()
        AFNetworkReachabilityManager.sharedManager().setReachabilityStatusChangeBlock({(status) in
            let defaults = NSUserDefaults.standardUserDefaults()
            if status == .NotReachable {
                defaults.setBool(false, forKey:REACHABLE_KEY)
            }
            else {
                defaults.setBool(false, forKey: REACHABLE_KEY)
            }
            defaults.synchronize()
        })
    }

И затем это в базовом файле →

 func isReachable() -> Bool {
        return NSUserDefaults.standardUserDefaults().boolForKey(REACHABLE_KEY)
    }