当用户启动应用程序离线时,可访问性不起作用

时间:2016-04-06 11:03:48

标签: ios swift reachability

我使用了来自苹果的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)
        }
    }

3 个答案:

答案 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()

上调用此函数