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

问题描述 投票:0回答:3

我正在尝试构建一个简单的应用程序,它实际上包装了一个网页,但我不想在设备没有连接时打开网络视图并显示消息。我找到了一个 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)
    }

}
ios swift connectivity
3个回答
0
投票

尝试这个方法

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

0
投票

您可以简单地将此文件导入到您的项目中: 可达性

然后,在你的 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
    }
}

0
投票

如果您正在寻找一种侦听互联网连接状态变化并在互联网被禁用时触发的方法,您可以使用 iOS 12 中引入的

NWPathMonitor
框架中的
Network
类。
pathUpdateHandler
每当网络路径发生变化(包括互联网连接状态发生变化)时,都会调用
NWPathMonitor
的关闭。

以下是如何使用

NWPathMonitor
来实现此目的:

import UIKit
import Network

class ViewController: UIViewController {

let monitor = NWPathMonitor()
var internetIsAvailable = false

override func viewDidLoad() {
    super.viewDidLoad()

    // Start monitoring network path updates
    monitor.pathUpdateHandler = { path in
        self.internetIsAvailable = path.status == .satisfied
        DispatchQueue.main.async {
            self.handleInternetConnectivityChange()
        }
    }

    let queue = DispatchQueue(label: "NetworkMonitor")
    monitor.start(queue: queue)
}

func handleInternetConnectivityChange() {
    if internetIsAvailable {
        print("Internet is enabled")
        // Internet is enabled, you can perform actions here
    } else {
        print("Internet is disabled")
        // Internet is disabled, you can perform actions here
    }
}
}
© www.soinside.com 2019 - 2024. All rights reserved.