在运行方法之前使用可达性检查连接

Posted

技术标签:

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

【参考方案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/…

以上是关于在运行方法之前使用可达性检查连接的主要内容,如果未能解决你的问题,请参考以下文章

始终检查 Cocoa 中的网络可达性

可达性 - 检查公共 Wi-Fi 连接是不是有效

Swift - 可达性崩溃

有没有办法在 jQuery 中检查服务器的可达性测试

实时检查网络可达性

使用 Reachability 2.2 检查 Internet 连接