我使用了来自苹果的Reachability Class来检查互联网连接。我将分享下面的代码。如果我在线打开应用程序,它工作正常。但是,如果我尝试离线打开应用程序,则不会触发可达性功能。任何人都可以帮我解决这个问题。 谢谢
以下是AppDelegate.swift中的代码
var reachability: Reachability?
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkForReachability:", name:kReachabilityChangedNotification, object: nil)
reachability = Reachability.reachabilityForInternetConnection();
reachability?.startNotifier();
return true
}
func checkForReachability(notification: NSNotification) {
let title_alert = NSLocalizedString("Connection Problem", comment: "Connection Problem")
let remoteHostStatus = self.reachability!.currentReachabilityStatus()
if (remoteHostStatus == NotReachable) {
let myAlert = UIAlertController(title:title_alert, message:NSLocalizedString("Please Check Your Connection", comment: "Connection Problem"), preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title:NSLocalizedString("Try Again",comment:"Connection Problem"), style:UIAlertActionStyle.Default) {
action in
self.checkForReachability(notification)
}
myAlert.addAction(okAction)
self.window?.rootViewController?.presentViewController(myAlert, animated:true, completion:nil)
}
}
答案 0 :(得分:1)
当状态更改时,可访问性会向您发送通知。如果您没有互联网,并且没有更改,则不会发送任何通知。您可能需要手动检查一次,可能是在创建可访问性对象之后。要检查,只需检查通知回调之外的currentReachabilityStatus()。
PS。当互联网消失时,我不会发出警报,但是当用户实际上做了需要互联网的事情并且它不起作用时。用户不应看到后台更新等内容,也不应显示警报。 (不好的例子是Mac上的iTunes,当我无意连接到iTunes时,它会告诉你它无法连接到iTunes商店)。
你究竟做了什么显然取决于你的应用程序。使用Safari - 它不会告诉您没有互联网连接,只有当您连接到页面时。有许多功能,没有互联网访问是有用的。
如果您的应用在没有互联网访问权限的情况下绝对没用,并且您无法做到更好,请显示一个“无互联网”的页面。如果用户可以做的事情,让他们做那些事情。程序员经常从程序员的角度看待这些事情:出了点问题,每个人都告诉你应该通知用户。从用户的角度来看:被告知重复警报会让他们紧张。想象一下,您是刚开启AirPlane模式的用户。该用户认为“为了天堂的缘故,我知道没有WiFi,因为我只是关闭它。不要一直告诉我”。
答案 1 :(得分:0)
对于Reachability所需的所有代码,这是一个很难回答的问题,但here是我为我的应用设置Reachability时使用的视频!它使用NSNotificationCenter不断检查用户是否在线。当用户离线时,您可以在用户重新联机之前执行操作。
答案 2 :(得分:0)
创建一个UIViewController扩展并添加一个这样的函数 -
func networkChanged() {
if let isReachable = Reachability()?.isReachable, isReachable == true {
noInternetErrorManager.removeNoInternetView()
} else {
noInternetErrorManager.displayNoInternetError(forParentView: view)
}
}
现在在viewDidLoad()
上调用此函数