在启动和恢复时检测网络以避免 ReachabilitySwift 崩溃
Detect the network at launch & resuming to avoid crash with ReachabilitySwift
我正在 Swift1.2 中开发一个 iOS 应用程序,当没有网络时我的应用程序崩溃了。
所以我想检测我是否有网络。但我希望能够随时知道,我的意思是应用程序何时启动或何时从后台恢复等。对于我所看到的,我应该在 AppDelegate.swift
中编写我的代码
为了执行此操作,我正在使用 ReachabilitySwift,但我没有成功使用它。
除了避免应用程序崩溃外,目标还在于打印一个横幅,向用户显示他没有网络的信息,就像 Facebook iOS 应用程序那样。但我已经接近它了。
感谢您在 Swift 世界
中的帮助和指导
不保证能在准确时刻为您带来结果的可达性,因为它是完全异步的。您的应用不应该等待可达性结果来执行连接,因为它不应该崩溃而出现问题。
您需要做的是在您的 AppDelegate
上添加一个 NSNotification
,以便在您的 Reachability 发生变化时收到通知。
您可以将此添加到 didFinishLaunchingWithOptions
let reachability = Reachability.reachabilityForInternetConnection()
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "reachabilityChanged:",
name: ReachabilityChangedNotification,
object: reachability)
reachability.startNotifier()
这是为了显示横幅,或任何您想做的事情:
func reachabilityChanged(note: NSNotification) {
let reachability = note.object as! Reachability
if reachability.isReachable() {
if reachability.isReachableViaWiFi() {
println("Reachable via WiFi")
} else {
println("Reachable via Cellular")
}
} else {
println("Not reachable")
}
}
我正在 Swift1.2 中开发一个 iOS 应用程序,当没有网络时我的应用程序崩溃了。
所以我想检测我是否有网络。但我希望能够随时知道,我的意思是应用程序何时启动或何时从后台恢复等。对于我所看到的,我应该在 AppDelegate.swift
中编写我的代码为了执行此操作,我正在使用 ReachabilitySwift,但我没有成功使用它。
除了避免应用程序崩溃外,目标还在于打印一个横幅,向用户显示他没有网络的信息,就像 Facebook iOS 应用程序那样。但我已经接近它了。
感谢您在 Swift 世界
中的帮助和指导不保证能在准确时刻为您带来结果的可达性,因为它是完全异步的。您的应用不应该等待可达性结果来执行连接,因为它不应该崩溃而出现问题。
您需要做的是在您的 AppDelegate
上添加一个 NSNotification
,以便在您的 Reachability 发生变化时收到通知。
您可以将此添加到 didFinishLaunchingWithOptions
let reachability = Reachability.reachabilityForInternetConnection()
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "reachabilityChanged:",
name: ReachabilityChangedNotification,
object: reachability)
reachability.startNotifier()
这是为了显示横幅,或任何您想做的事情:
func reachabilityChanged(note: NSNotification) {
let reachability = note.object as! Reachability
if reachability.isReachable() {
if reachability.isReachableViaWiFi() {
println("Reachable via WiFi")
} else {
println("Reachable via Cellular")
}
} else {
println("Not reachable")
}
}