2017-09-13 1 views
0

J'ai un problème avec NetworkReachabilityManager de Alamofire. J'ai essayé de tester la connexion avec cet exemple code:Alamofire - NetworkReachabilityManager ne fonctionne pas avec .notReachable

override func viewDidLoad() { 
    super.viewDidLoad() 

    let manager = NetworkReachabilityManager(host: "www.apple.com") 

    manager?.listener = { status in 

    switch status { 

     case .notReachable: 
      print("network connection status - lost") 
     case .reachable(NetworkReachabilityManager.ConnectionType.ethernetOrWiFi): 
      print("network connection status - ethernet/WiFI") 
     case .reachable(NetworkReachabilityManager.ConnectionType.wwan): 
      print("network connection status - wwan") 
     default: 
      break 
    } 
    } 
    manager?.startListening() 
} 

Lorsque j'ai essayé de mettre le wifi hors et j'ai reçu seule réponse vide. Aucune réponse comme "état de la connexion réseau - perdu".

Mais quand j'ai essayé de mettre le wifi et j'ai reçu le résultat « état de la connexion réseau - Ethernet/WiFI » dans ce qui est une bonne réponse. Une idée de ce qui ne va pas avec .notReachable? Toute suggestion appréciée.

+0

Je pense que votre problème est lié à la définition d'instance de gestionnaire, vous pouvez poster où vous déclarez 'laisser gestionnaire = NetworkReachabilityManager (hôte: "www.apple.com") 'dans une méthode? –

+0

@ReinierMelian J'ai mis à jour mon message. Donc, vous pouvez voir où est la méthode. (Gardez à l'esprit que je pouvais déplacer les codes à une autre méthode ne Si je les déplace pas être seulement dans la méthode viewDidLoad. À une autre méthode, alors il a les mêmes problèmes comme ci-dessus.) – HotDudeSmith

+0

gestionnaire annoncez comme variable dans votre UIViewController puis dans viewDidLoad initialiser cette variable, et laissez-moi savoir si votre question permet de résoudre, j'utilise NetworkReachabilityManager dans une classe singleton –

Répondre

0

Selon Alamofire « Assurez-vous de se rappeler de conserver le gestionnaire » afin de créer un gestionnaire comme celui-ci

class A: UIViewController{ 

let manager = NetworkReachabilityManager(host: "www.apple.com") 

override func viewDidLoad() { 
super.viewDidLoad() 

// before start listening you can check 
if (manager?.isReachableOnEthernetOrWiFi == true) 
    { 
    print("internet is available") 
    } 
    else 
    { 
    print("internet is not available") 
    } 

manager?.startListening() 

manager?.listener = { status in 

switch status { 

    case .notReachable: 
     print("network connection status - lost") 
    case .reachable(NetworkReachabilityManager.ConnectionType.ethernetOrWiFi): 
     print("network connection status - ethernet/WiFI") 
    case .reachable(NetworkReachabilityManager.ConnectionType.wwan): 
     print("network connection status - wwan") 
    default: 
     break 
      } 
    }  

} 

} 
+0

j'essayé et ça ne fonctionne pas du tout. C'est très intéressant ce que j'ai découvert de bizarre à propos de l'application en cours. Avant de lancer l'application, j'ai d'abord éteint la connexion Wi-Fi, puis j'ai lancé l'application et cela me donne une réponse vide. Mais si j'ai décidé d'avoir le wifi avant de lancer l'application et ça donne une réponse mais si j'éteins le wifi alors que l'application est allumée, elle affiche la réponse "statut de connexion réseau - perdu". Avez-vous les mêmes problèmes avec votre projet? Je voulais juste m'assurer que c'est un bug d'Alamofire NetworkReachabilityManager. – HotDudeSmith

+0

J'ai mis à jour ma réponse, vous pouvez vérifier la connexion Internet avec la propriété 'isReachable' du gestionnaire. parce qu'avant de lancer l'application, l'écouteur Internet n'est pas disponible, c'est pourquoi il donne une réponse vide. –

+0

https://github.com/Alamofire/Alamofire/issues/2275 Vérifiez que ce problème est déjà enregistré. –