Ios 我的可达性通知程序只能被调用一次

Ios 我的可达性通知程序只能被调用一次,ios,swift,reachability,Ios,Swift,Reachability,因此,我的AppDelegate中有以下内容。当我关闭WIFI时,它会通知我,但在初次运行后不会作出反应。我以前就有过这样的工作。我使用的是带有Xcode 8的swift 3以及此版本的swift和Xcode的可达性 我希望能解决这个问题。谢谢 var reachability: Reachability? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOpt

因此,我的AppDelegate中有以下内容。
当我关闭WIFI时,它会通知我,但在初次运行后不会作出反应。
我以前就有过这样的工作。
我使用的是带有Xcode 8的swift 3以及此版本的swift和Xcode的可达性

我希望能解决这个问题。

谢谢

    var reachability: Reachability?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        self.reachability = Reachability()

         NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged(_:)), name: ReachabilityChangedNotification, object: reachability)

        do {
            try self.reachability?.startNotifier()
        } catch {
            print("Unable to start Notifier")
        }

        return true
    }

    func reachabilityChanged(_ note:Notification){
        print("is in here")
        let reachability = note.object as! Reachability
        if reachability.isReachable{
            print("is Reachable")
            // self.amConnected.text = "YES"
            //self.amConnected.fadeOut(duration: 2.0)
        }else{
            print("IsNotReachable")
            //self.amConnected.text = "No"
            //self.amConnected.fadeIn(duration: 2.0)
        }
        print("Changed status")    
    }

尝试为
addObserver
中的
object
参数传递
nil
。另外,对于Swift 3,我必须使用
self.reachability=reachability.forInternetConnection()
addObserver
中为
对象
参数传递
nil
。另外,对于Swift 3,我必须使用
self.reachability=reachability来初始化它。对于InternetConnection()

Swift 3中的可达性有一些变化。下载最新的
可达性.swift
文件并将其添加到项目中


有关Swift 2.x代码,请检查我的答案

Swift 3.x代码

现在,在您的
AppDelegate
中,获取一个
可达性
类对象

private var reachability:Reachability!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    //Network Reachability Notification check
    NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: ReachabilityChangedNotification, object: nil)

    self.reachability = Reachability.init()
    do {
        try self.reachability.startNotifier()
    } catch {
    }
    return true
}
可达性更改
方法定义

//MARK:- Network Check
func reachabilityChanged(notification:Notification) {
    let reachability = notification.object as! Reachability
    if reachability.isReachable {
        if reachability.isReachableViaWiFi {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }
    } else {
         print("Network not reachable")
    }
}
每当用户从Wifi切换到蜂窝网络,反之亦然,或当网络连接和断开,反之亦然时,都会调用此命令。
在我的情况下,工作正常

有关更多详细信息,请参阅Swift 3中断更改部分

我给你做了一个样品


Swift 3中的可达性有一些变化。下载最新的
可达性.swift
文件并将其添加到项目中


有关Swift 2.x
代码,请检查我的答案

Swift 3.x代码

现在,在您的
AppDelegate
中,获取一个
可达性
类对象

private var reachability:Reachability!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    //Network Reachability Notification check
    NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: ReachabilityChangedNotification, object: nil)

    self.reachability = Reachability.init()
    do {
        try self.reachability.startNotifier()
    } catch {
    }
    return true
}
可达性更改
方法定义

//MARK:- Network Check
func reachabilityChanged(notification:Notification) {
    let reachability = notification.object as! Reachability
    if reachability.isReachable {
        if reachability.isReachableViaWiFi {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }
    } else {
         print("Network not reachable")
    }
}
每当用户从Wifi切换到蜂窝网络,反之亦然,或当网络连接和断开,反之亦然时,都会调用此命令。
在我的情况下,工作正常

有关更多详细信息,请参阅Swift 3中断更改部分

我给你做了一个样品


检查我的答案检查我的答案不再有forInternetConnection方法。我正在使用Xcode 8,昨天从下载了示例。Xcode实际上提示我使用
进行InternetConnection
,它在Swift 3中运行良好。它实际上只是通过调用系统配置框架。不再有forInternetConnection方法。我使用的是Xcode 8,昨天从下载的示例。Xcode实际上提示我使用
进行InternetConnection
,它在Swift 3中运行良好。它实际上只是通过系统配置框架进行调用。进行了更新…并得到了相同的结果…在加载时触发有互联网连接…当我禁用wifi时,它会通知我…然后当我打开wifi时,没有通知…伙计,你的应用程序是否保留在后台?在我的情况下,启用禁用WIFI、禁用internet cellularI将只提供一个指向示例的链接,然后让我知道查看编辑并从链接下载项目,运行它并使用internet进行更改,然后让我知道。将应用程序放在前台如果您将应用程序放在后台,然后禁用wifi,则每当您再次进入应用程序时,它将以
可达性更改
选择器方法进行更新…并产生相同的结果…在有互联网连接的情况下加载…当我禁用wifi时,它会通知我…然后当我重新打开它时,没有通知…伙计,你是否将应用程序保留在后台?在我的情况下,启用禁用WIFI、禁用internet cellularI将只提供一个指向示例的链接,然后让我知道查看编辑并从链接下载项目,运行它并使用internet进行更改,然后让我知道。将你的应用程序置于前台如果你将应用程序置于后台,然后禁用wifi,每当你再次进入应用程序时,它将以
reachabilityChanged
selector方法出现