我正在尝试设置可达性以在与 Internet 的连接丢失时显示警报视图。
我正在努力理解可达性实际上是如何工作的。我已阅读文档并设置示例应用程序以从 Apple 审查,但我想更好地理解代码及其工作方式。
在我的设置中,我正在寻找两件事:1. 告诉我何时失去与 Internet 的连接 2. 告诉我何时失去与主机地址的连接
该代码是在我的应用程序委托中设置的,因为我希望 UIAlertView 在连接丢失时出现在应用程序内的任何位置。
对于场景 1,我希望显示一个 UIAlertView 来向用户发送消息说连接丢失。单击时将出现一个“重试”按钮,然后再次测试连接以查看互联网连接是否已恢复,如果没有再次显示警报视图。
代码:App Delegate imp 文件:
//Called by Reachability whenever status changes.
- (void)reachabilityChanged:(NSNotification* )note {
Reachability *curReach = (Reachability *)[note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NSLog(@"Reachability changed: %@", curReach);
networkStatus = [curReach currentReachabilityStatus];
if (networkStatus == NotReachable) {
NSLog(@"NOT REACHABLE");\
UIAlertView *connectionNotReachable = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"connectionNotReachableTitle", @"Title for alert view - connection Not Reachable") message:NSLocalizedString(@"connectionNotReachableMessage", @"Message for alert view - connection Not Reachable") delegate:self cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"connectionNotReachableTryAgain", @"Try again button for alert view - connection Not Reachable"), nil];
[connectionNotReachable show];
return;
} else {
NSLog(@"REACHABLE");
}
}
- (void)monitorReachability {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:ReachabilityChangedNotification object:nil];
self.hostReach = [Reachability reachabilityWithHostName: @"api.parse.com"];
[self.hostReach startNotifier];
self.internetReach = [Reachability reachabilityForInternetConnection];
[self.internetReach startNotifier];
}
困惑:我不明白这段代码是如何工作的。所以在我的application didFinishLaunchingWithOptions:
我叫[self monitorReachability]
。
我猜这设置了 hostReach 和 internetReach 的通知程序。但是在该reachabilityChanged
方法中,我如何确定这是 hostReach == NotReachable 还是 internetReach == Not Reachable 之间的区别。
理想情况下,对于无法访问的 hostReach,我目前不想做太多事情,因为这可能是当时无法访问这个特定的 api。所以我不想在那段时间完全使应用程序无法访问。