通知用户可访问性(Ashley Mills' Reachability)

时间:2015-11-06 23:37:10

标签: ios swift reachability reachability-swift

我开了一个应用程序,我想添加一个功能,当应用程序的互联网可访问性发生变化时通知用户。

我使用Ashley Mills' Reachability.swift文件。

现在我了解它是如何工作的,所以我把代码设置为当互联网可达性发生变化时,它会在appDelegate中打印它的状态。

但是当我试图提醒用户没有网络连接的功能时,它会出错。

这是我在app delegate中的代码。

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

var reachability : Reachability?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
do {
        let reachability = try Reachability.reachabilityForInternetConnection()
        self.reachability = reachability
    } catch ReachabilityError.FailedToCreateWithAddress(let address) {

    }
    catch {}

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: ReachabilityChangedNotification, object: reachability)
    do {
        try reachability?.startNotifier()
    } catch {}

    return true
}

func reachabilityChanged(notification: NSNotification) {
    let reachability = notification.object as! Reachability

    if reachability.isReachable() {

        print("reached")
    } else {


        print("not reached")
    }
}

这很有效。 但是Viewcontroller中的代码,

class ViewController: UIViewController {
var reachability : Reachability?
@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "HeyUserInternetDoesntWork", name: ReachabilityChangedNotification, object: nil)
    //get call from appDelegate Notification.
     }


func HeyUserInternetDoesntWork() {


    if reachability!.isReachable() {

        print("notify User working")
    } else {


        print("Notify user not working")
    }
}
  

在解包可选值时意外发现nil

收到此错误。

我将把代码用于在用户工作后提醒用户。

在此提问

我怎样才能做到这一点? 它不必使用该方法,但我想继续使用NSNotification。 其实我是一个新编码的人,所以请详细解释。

1 个答案:

答案 0 :(得分:2)

您在哪里初始化可达性属性?这个变量总是零。 在func HeyUserInternetDoesntWork中,您尝试使用可达性,当然它会出错。你需要像这样的init属性:

private let reachability = Reachability.reachabilityForInternetConnection()

使用func HeyUserInternetDoesntWork&动态'像这样的关键字:

dynamic func HeyUserInternetDoesntWork() {

if reachability!.isReachable() {

    print("notify User working")
} else {


    print("Notify user not working")
}
}

因为NSNotificationCenter观察者选择器应该是动态的。