IOS 整个应用程序的可达性以及视图加载时的可达性

IOS Reachibility in whole app and just on on view load

我已将以下代码添加到我的视图控制器的 viewDidLoad 中:

let reachability: Reachability
        do {
            reachability = try Reachability.reachabilityForInternetConnection()
        } catch {
            print("Unable to create Reachability")
            return
        }

        reachability.whenReachable = { reachability in
            // this is called on a background thread, but UI updates must
            // be 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
            // this is called on a background thread, but UI updates must
            // be on the main thread, like this:
            dispatch_async(dispatch_get_main_queue()) {
                print("Not reachable")
            }
        }

        do {
            try reachability.startNotifier()

        } catch {
            print("Unable to start notifier")
        }

它会通知我视图何时加载,但不会在加载后状态发生变化时通知我。我想知道如何扩展它,以便我可以在应用程序的任何位置收到通知,而不仅仅是在视图加载时通知,因为互联网可能会在视图加载后返回。

谢谢

您应该将可达性变量声明为实例变量,而不仅仅是函数内的局部变量。您可以进一步使用通知使信息在您的应用程序中可用。只需确保包含可达性变量的实例在您的应用程序的生命周期内存在。

在 AppDelegate 中启动可达性并让它通知所有注册的观察者创建和发布通知,这样您就可以按照 "BostonMacOSX" 的建议注册您需要的每个控制器。

我建议您按照连接控制器的方式创建一些东西,该控制器管理所有与可达性相关的事件并保存实例本身。然后这个控制器可以向所有监听视图控制器触发有关互联网连接变化的事件。在 didFinishLaunchingWithOptions

之后在您的应用程序委托中初始化并启动可达性通知程序