仅在提供的控制器上使用 AFNetworking 监控可达性
Posted
技术标签:
【中文标题】仅在提供的控制器上使用 AFNetworking 监控可达性【英文标题】:Monitoring Reachability with AFNetworking only on a presented controller 【发布时间】:2013-11-19 14:20:28 【问题描述】:我正在使用AFNetworking 2.0 来监控可达性。
在我的主要 VC 的 viewDidLoad 中,我有以下内容:
// Start monitoring the internet connection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
// Check the reachability status and show an alert if the internet connection is not available
switch (status)
case -1:
// AFNetworkReachabilityStatusUnknown = -1,
NSLog(@"The reachability status is Unknown");
[self reachabilityNotReachableAlert];
case 0:
// AFNetworkReachabilityStatusNotReachable = 0
NSLog(@"The reachability status is not reachable");
[self reachabilityNotReachableAlert];
case 1:
// AFNetworkReachabilityStatusReachableViaWWAN = 1
NSLog(@"The reachability status is reachable via WWAN");
case 2:
// AFNetworkReachabilityStatusReachableViaWiFi = 2
NSLog(@"The reachability status is reachable via WiFi");
break;
default:
break;
];
在这个主 VC 之上,我加载了不同的视图控制器/路径/导航控制器,并在它们被使用后关闭。
问题
我要做的是监视连接,但仅在显示主 VC 时。例如,如果我在主 VC 上加载导航控制器并且连接丢失,我仍然会收到对 reachabilityNotReachableAlert
的调用。
如何只监视主 VC 何时显示在屏幕上,而不必一直运行 stopMonitoring
和 startMonitoring
?
我想我可以将stopMonitoring
放在prepareForSegue
方法中,然后将startMonitoring
放在viewDidAppear
中,没有更简单的方法吗?
【问题讨论】:
我想,你忘了break
s :)
【参考方案1】:
很遗憾,没有更简单的方法可以做到这一点。
不过,您提到的计划听起来并没有那么糟糕。您实际上是在要求经理关闭和打开通知,它需要您告诉它何时这样做。
我是这样做的:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[manager startMonitoring];
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[manager stopMonitoring];
【讨论】:
谢谢,有时我会过度担心自己的方法,而事实证明它往往是正确的方法。我已经添加了一个更新来添加超级调用。 这也是我作为程序员最大的挣扎。不用担心。你今天写的任何东西明天都可以重构。这些天来,如果我发现我对完美解决方案的担忧和寻找阻碍了发货日期,只要我的方法适用于所有相关场景,我就会继续前进。关于调用 super 的好消息,我更新了我的示例代码。以上是关于仅在提供的控制器上使用 AFNetworking 监控可达性的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking iOS JSON 解析仅在黎巴嫩不正确