IOS在整个应用程序中的可访问性和仅在视图加载上

时间:2016-08-27 19:43:54

标签: ios swift notifications reachability

我已将以下代码添加到视图控制器的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")
        }

它通知我视图加载的时间,而不是在加载后状态发生变化时。我想知道如何扩展这个以便我可以在应用程序的任何地方发出通知,而不仅仅是视图加载时因为互联网可能在视图加载后返回。

由于

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在AppDelegate中启动可达性并使其通知所有已注册的观察者创建并发布通知,这样您就可以注册所需的每个控制器,如#34; BostonMacOSX"建议。

答案 2 :(得分:0)

我建议你创建一个连接控制器的东西,管理所有与可达性相关的事件&持有实例本身。然后,该控制器可以向所有监听视图控制器发送有关互联网连接变化的事件。在didFinishLaunchingWithOptions

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