通知用户可达性(Ashley Mills' Reachability)
Notify user reachability (Ashley Mills' Reachability)
我制作了一个应用程序,我想添加在应用程序的互联网可达性发生变化时通知用户的功能。
我使用 Ashley Mills 的 Reachability.swift 文件。
现在我了解它是如何工作的,所以我放置了代码,当互联网可达性发生变化时,它会在 appDelegate 中打印它的状态。
然而,当我尝试启用提醒用户没有互联网连接的功能时,出现错误。
这是我在应用程序委托中的代码。
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")
}
}
unexpectedly found nil while unwrapping an Optional value
它得到这个错误。
我将添加代码以在它起作用后提醒用户。
这里有问题,
我怎样才能做到这一点?
它不必使用该方法,但我想继续使用 NSNotification。
其实我是一个coding新人,所以请详细说明。
你在哪里初始化可达性属性?这个变量总是零。
在 func HeyUserInternetDoesntWork 中,您尝试使用可达性,当然它会出错。您需要像这样初始化 属性:
private let reachability = Reachability.reachabilityForInternetConnection()
使用带有 'dynamic' 关键字的 func HeyUserInternetDoesntWork 后,如下所示:
dynamic func HeyUserInternetDoesntWork() {
if reachability!.isReachable() {
print("notify User working")
} else {
print("Notify user not working")
}
}
因为 NSNotificationCenter 观察者选择器应该是动态的。
我制作了一个应用程序,我想添加在应用程序的互联网可达性发生变化时通知用户的功能。
我使用 Ashley Mills 的 Reachability.swift 文件。
现在我了解它是如何工作的,所以我放置了代码,当互联网可达性发生变化时,它会在 appDelegate 中打印它的状态。
然而,当我尝试启用提醒用户没有互联网连接的功能时,出现错误。
这是我在应用程序委托中的代码。
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")
}
}
unexpectedly found nil while unwrapping an Optional value
它得到这个错误。
我将添加代码以在它起作用后提醒用户。
这里有问题,
我怎样才能做到这一点? 它不必使用该方法,但我想继续使用 NSNotification。 其实我是一个coding新人,所以请详细说明。
你在哪里初始化可达性属性?这个变量总是零。 在 func HeyUserInternetDoesntWork 中,您尝试使用可达性,当然它会出错。您需要像这样初始化 属性:
private let reachability = Reachability.reachabilityForInternetConnection()
使用带有 'dynamic' 关键字的 func HeyUserInternetDoesntWork 后,如下所示:
dynamic func HeyUserInternetDoesntWork() {
if reachability!.isReachable() {
print("notify User working")
} else {
print("Notify user not working")
}
}
因为 NSNotificationCenter 观察者选择器应该是动态的。