2016-08-15 1 views
1

J'ai utilisé une solution de débordement de pile pour vérifier la connectivité Internet Son travaille pour les réseaux wifi, mais pas pour le réseau cellulairevérifier la connectivité Internet pour les réseaux cellulaires à ios utilisant Swift

public class YASConnectivity { 
class func isConnectedToNetwork() -> Bool { 

    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    }) else { 
     return false 
    } 

    var flags : SCNetworkReachabilityFlags = [] 
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { 
     return false 
    } 

    let isReachable = flags.contains(.Reachable) 
    let needsConnection = flags.contains(.ConnectionRequired) 
    return (isReachable && !needsConnection) 
} 

} 

Comment puis-je vérifier la connectivité Internet réseaux cellulaires?

Je reçois cette erreur lorsque vous essayez la solution Rock

enter image description here

Répondre

2

Essayez d'utiliser ce tiers lib: Reachability

et écrire ce code:

let reachability = Reachability.reachabilityForInternetConnection() 

reachability?.whenReachable = { reachability in 
    // keep in mind this is called on a background thread 
    // and if you are updating the UI it needs to happen 
    // on the main thread, like this: 
    dispatch_async(dispatch_get_main_queue()) { 
     if reachability.isReachableViaWiFi() { 
      print("Reachable via WiFi") 
     } else { 
      print("Reachable via Cellular") 
     } 
    } 
} 
reachability?.whenUnreachable = { reachability in 
    // keep in mind this is called on a background thread 
    // and if you are updating the UI it needs to happen 
    // on the main thread, like this: 
    dispatch_async(dispatch_get_main_queue()) { 
     print("Not reachable") 
    } 
} 

reachability?.startNotifier() 
+0

Où est-ce exactement que je dois réaliser cela? – Byte

+0

@Byte Vous pouvez l'exécuter dans votre contrôleur de vue principale ou votre délégué d'application, je suggère d'utiliser un objet qui l'enveloppe pour que vous puissiez avoir un code propre. Anywaym la première étape pourrait être appelez-le dans le délégué de l'application dans le lancement avec options délégué –

+0

pouvez-vous s'il vous plaît mettre à jour votre réponse sous la forme d'une fonction qui renvoie booléenne pour la connectivité? Merci – Byte

2

d'abord Ajoutez le fichier Reachability.swift dans votre projet et utilisez ce code.

class func checkNetworkConnection() -> Bool 
{ 
    let reachable = Reachability.reachabilityForInternetConnection() 

    if reachable.isReachable() || reachable.isReachableViaWiFi() 
    { 
     return true 
    } 
    else 
    { 
     print("Mobile Data") 
     return false 

    } 
} 

je l'espère aider ...

+0

Disons que j'ai turend Sur mes données mobiles. mais je n'ai pas de connectivité Internet. Est-ce que ça va marcher ? – Byte

+0

il imprimera seulement des données mobiles. – Rock

+0

Je suis désolé de ne pas travailler pour les réseaux cellulaires. Il retourne vrai si mes données mobiles sont activées et que je n'ai pas de forfait internet. – Byte