【问题标题】:Using Reachability to check for connection before method is run在运行方法之前使用可达性检查连接
【发布时间】:2013-11-13 12:07:51
【问题描述】:

我想使用Reachability 在我的应用程序中检查 Internet 连接。

我找到了a tutorial,它在应用程序中进行了设置。在本教程中,它解释了“第 4 步” - 可达性管理器。它提到了以下内容:

如果对象需要直接访问可达性,这很有用 单例对象管理的实例。

这方面的例子是什么?什么对象需要直接访问实例?

在我的应用程序中,我有多种方法需要运行互联网连接。我想要实现的是以下两种方法之一:

  1. 当互联网连接丢失时显示一个 UIAlertView 询问 用户重试。

    注意:这仅在某些视图控制器上,而不是全部 应用程序,因为我不需要完全限制访问 结束。

  2. 或者 - 我想使用一种方法来检查互联网连接 在运行需要 连接。

如何以这种方式使用可达性进行设置?

【问题讨论】:

    标签: ios ios6 ios7 reachability appdelegate


    【解决方案1】:

    在第 4 节中,有一个 Reachability 包装器示例(但在该实现中没有 kReachabilityChangedNotification 处理)。那么应该如何使用呢? — 正如您在 MTReachabilityManager 的界面中看到的那样,有 1 种获取管理器单例实例的方法和 4 种使用它的方法:

    + (BOOL)isReachable;
    + (BOOL)isUnreachable;
    + (BOOL)isReachableViaWWAN;
    + (BOOL)isReachableViaWiFi;
    

    对于需要连接的方法中的第二种方法,您必须执行以下操作:

    if ([[MTReachabilityManager sharedManager] isReachable]) {
         //do internet
    } else {
         //alert 'no internet' or something
    }
    

    对于第一种方法(从网络获取数据期间连接丢失),此包装器不会帮助您(未实现对 kReachabilityChangedNotification 的侦听)。所以你必须从本教程的第 3 部分(第 3 步:通知)中添加代码——在调用网络代码之前添加 kReachabilityChangedNotification 的侦听器:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
    

    并添加处理通知的方法(将在互联网更改其状态时触发):

    - (void)reachabilityDidChange:(NSNotification *)notification {
        Reachability *reachability = (Reachability *)[notification object];
        if ([reachability isReachable]) {
            NSLog(@"Reachable");
            //if before there was no internet - now you can do whatever user wants when there was no internet
        } else {
            NSLog(@"Unreachable");
            //alert retry
        }
    }
    

    【讨论】:

    • 谢谢,在第一个例子中。如果我只想检查特定视图控制器上的互联网连接,我将如何处理。因此,在特定的视图控制器上,我想显示一个警报,在返回 Internet 连接之前它们无法通过,但并非所有视图控制器都只是一个示例?
    • 我是否只将观察者添加到视图控制器 viewDidLoad 中,对于我想监控的视图控制器?
    • 1) 是的,您必须在要加载某些内容之前检查连接 ([[MTReachabilityManager sharedManager] isReachable])(用 'if' 包装网络代码)。
    • 如果您想为所有控制器添加观察者 - 您可以为 UIViewController 创建任一类别或为所有需要网络工作的 vc 创建基本视图控制器类。创建一些网络管理器也是一个很好的做法,它将处理所有网络工作(也包括网络可用性)——我建议你看看 AFNetworking 的方向,这真的很好)
    • 如果您使用的是 AFNetworking 2.0,则有 AFNetworkReachabilityManager 类,并且所有基础网络类都有指向它的链接 @property (readonly, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; github.com/AFNetworking/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2015-11-18
    相关资源
    最近更新 更多