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