web-dev-qa-db-fra.com

Configuration de l'accessibilité avec AFNetworking 2.0

J'essaie de configurer l'accessibilité à l'aide du nouveau 2.0 AFNetworking .

Dans mon AppDelegate, j'initialise le sharedManager.

// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];

Ensuite, dans la méthode VC pertinente, je vérifie si isReachable:

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

À l'heure actuelle, cela ne fonctionne pas comme prévu dans le simulateur, mais j'imagine que cela devrait être testé sur l'appareil et non sur le simulateur.

Question Ce que je voudrais faire, c'est surveiller la connectivité au sein du VC. J'ai donc exécuté ce qui suit dans le viewDidLoad:

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

Comment puis-je m'inscrire aux modifications? Quel est/serait appelé une fois la connexion réseau modifiée, je ne peux pas voir cela dans la documentation.

17
StuartM

Comme vous pouvez le lire dans la page de lecture AFNetworking

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

Voici également n lien vers la documentation officielle .

43

J'ai une classe AFHTTPRequestOperationManager singleton. Dans le singleton a une méthode:

+(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);
    }

}];

}

Avant de faire une demande, vous appelez cette méthode qui retourne un bloc indiquant si Internet est accessible:

[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
Marlon Ruiz

Je viens de passer en revue votre question et toutes les réponses. Après cela, j'ai décidé de faire toutes ces choses une fois. Donc, dans mon projet existant, je viens d'inclure l'AFNetworking à travers des cabosses de cacao et voici la solution qui me réveille complètement.

Solution - Tout d'abord AFNetworkReachabilityManager est une classe singleton. Vous n'avez pas besoin de faire l'initialisation AppDelegate pour 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];
    }
}];

Donc, dans ce cas, chaque fois que l'appareil se connecte à un réseau, il fera d'abord le processus startMonitoring et après cela, il frappera le bloc d'état à chaque fois et affichera une alerte en fonction de l'état.

Vous pouvez faire n'importe quoi selon votre choix en remplaçant les alertes sur le bloc d'état. Je l'ai utilisé pour charger automatiquement une page Web à partir du stockage local, mais j'ai supprimé ce code pour plus de simplicité.

Son même travail avec mon simulateur et Mac mini ..

Merci

J'espère que cela vous a aidé.

1
onCompletion

J'utilise ceci dans le délégué de l'application ->

 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()
        })
    }

Et puis cela dans le fichier de base ->

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