iOS如果设备没有互联网连接,如何检测它并显示相应的文本

问题描述

我正在尝试构建一个简单的应用程序,该应用程序实际上包装了一个网页,但是当设备没有连接时,我不想打开网页视图并显示一条消息。我找到了URLSessionConfiguration,但是我不知道如何实现它,非常感谢

到目前为止的代码

class ViewController: UIViewController {

    @IBOutlet weak var myWebView: WKWebView!
    override func viewDidLoad() {


        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let url = URL(string: "https://neti.ee")
        let config = URLSessionConfiguration.default
        config.waitsForConnectivity = true
        config.timeoutIntervalForResource = 300
        let session = URLSession(configuration: config)

        session.dataTask(with: url!) { data,response,error in
        }
        myWebView.load(URLRequest(url: url!));
        let label = UILabel(frame: CGRect(x: 100,y: 200,width: 220,height: 50))
        label.text = "Please connect to the internet";
        self.view.addSubview(label)
    }

}

解决方法

尝试此方法,然后import SystemConfiguration

static func isInternetAvailable() -> Bool
{
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    
    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self,capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil,zeroSockAddress)
        }
    }
    
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!,&flags) {
        return false
    }
    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)
    return (isReachable && !needsConnection)
}
,

您只需将以下文件导入到项目中即可: Reachability

然后,在您的viewController中,您可以像这样检查连接:

class ViewController: UIViewController {

    let reachability = try! Reachability()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        reachability.whenReachable = { _  in
            //connected
        }
        reachability.whenUnreachable = { _ in
            //not connected
        }
        
        NotificationCenter.default.addObserver(self,selector: #selector(internetChanged),name: Notification.Name.reachabilityChanged,object: reachability)
        do{
            try reachability.startNotifier()
        } catch {
            print("Could not strat notifier")
        }
    }
    
    @objc
    func internetChanged(note: Notification) {
        //do something
    }
}