2015-11-01 1 views
1

J'essaie de vérifier l'état de la connexion Internet via la classe Reachability.swift qui a été écrite dans swift 2.0. Voici le code de la classe:Vérificateur de connexion réseau via la classe d'accessibilité swift 2.0

import UIKit 
import Foundation 
import SystemConfiguration 

public class Reachability: NSObject { 

    class func isConnectedToNetwork() -> Bool { 

     var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) 
     zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 

     let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
      SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0)) 
     } 

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

     let isReachable = flags == .Reachable 
     let needsConnection = flags == .ConnectionRequired 

     return (isReachable && !needsConnection) 

    } 
} 

Ma question est la suivante. Quand je suis connecté au réseau cellulaire, cette classe ne peut pas le reconnaître, ce qui signifie que la méthode isConnectedToNetwork() renvoie false sur mon iPhone 5, pas sur simulateur. Quelle pourrait être la situation là-bas? S'il vous plait aide sv serait apprécié, thanx ...

+0

Pour une solution de travail, jetez un oeil à https://github.com/ashleymills/reachability.swift –

+0

Merci, je l'ai vérifié avant et c'est un travail incroyable, mais pour l'utiliser j'avais besoin de changer mes données modal. –

+0

Merci encore! :) J'ai réussi à ajouter une méthode de classe afin de l'adapter à ma classe modale ... –

Répondre

1

Avec Reachable et ConnectionRequired vous devez également vérifier cela.

let isWan = flags = .IsWWAN 

Si l'un des paramètres Accessibilité ou IsWWAN est défini, vous êtes connecté au réseau. IsWWAN vous indique si le nom ou l'adresse du noeud spécifié peut être atteint via une connexion cellulaire, telle que EDGE ou GPRS.

+0

let isReachable = flags == .Recherche let needsConnection = drapeaux == .ConnectionRequired let isWan = flags == .IsWWAN return ((isReachable || isWan) &&! needsConnection) –

+0

J'ai changé les dernières lignes de code comme ci-dessus, mais cela n'a pas fonctionné. Comment devrais-je le changer? –