【问题标题】:How Do Certain iOS Apps Know When Internet Connection is Lost某些 iOS 应用程序如何知道何时失去 Internet 连接
【发布时间】:2016-10-25 06:33:28
【问题描述】:

我正在开发一个需要互联网连接的 iOS 应用程序。我注意到 FaceBook 应用程序会更新屏幕以在您失去连接时告诉您。当您重新连接时,它还会删除警告。

我的问题是这是怎么发生的?由于视图已经加载,因此必须在连接丢失或恢复时调用某种类型的通知。今晚我从 GitHub 安装了流行的可达性代码,如果我在加载视图后断开连接,我不会收到连接丢失的通知。我确实注册了通知。代码如下。

override func viewWillAppear(animated: Bool)
    {
        super.viewWillAppear(animated)

        var reachability: Reachability?

        //declare this inside of viewWillAppear
        do {
            reachability = try Reachability.reachabilityForInternetConnection()
        } catch {
            print("Unable to create Reachability")
            return
        }

        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(TipViewController.reachabilityChanged(_:)),name: ReachabilityChangedNotification,object: reachability)
        do{
            try reachability?.startNotifier()
        }catch{
            print("could not start reachability notifier")
        }
    }

    func reachabilityChanged(note: NSNotification) {

        let reachability = note.object as! Reachability

        if reachability.isReachable() {
            if reachability.isReachableViaWiFi() {
                print("Reachable via WiFi")
            } else {
                print("Reachable via Cellular")
            }
        } else {
            print("Network not reachable")
        }
    }

任何帮助将不胜感激。

【问题讨论】:

  • 有什么解决办法吗?网络连接发生变化时是否会触发该方法?
  • 我正在试验并解决了它。如果我在全局范围内声明可达性实例,它就起作用了。谢谢。

标签: swift nsnotificationcenter


【解决方案1】:

首先将 Reachability.swift 文件添加到您的项目中,您可以从下面的链接获取该文件

https://github.com/pavangandhi/TestProject/tree/master/TestProject/AppConstants

使用下面给出的代码来测试应用程序是否连接到互联网:

// check internet connectivity if its returns YES means its connect with internet, Wifi and cellular data

 class func isConnectedToNetwork() -> Bool 
 {
    let reachability = Reachability.reachabilityForInternetConnection()

    if reachability.isReachable() || reachability.isReachableViaWiFi() || reachability.isReachableViaWWAN()
    {
        return true
    }
    else
    {
        return false
    }
}

注意:在添加此代码之前,您需要将 Reachability.swift 文件添加到您的项目中。

【讨论】:

  • 如果我在不重新加载视图的情况下关闭或打开 wifi,我看不到这会如何更新我。我错过了什么吗?
  • 当你去执行任何需要网络连接的事件时,你可以使用它并向用户显示弹出窗口。
  • 我知道这是一个选项,但这并不能解决我提出的问题。无论如何感谢您的帮助。
【解决方案2】:

使用This

然后在您想要的地方拨打isConnectedToNetwork()

guard isConnectedToNetwork() != false else{
//Do your thing
return
}
// Do your thing if is connected is true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多