仅在提供的控制器上使用 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 何时显示在屏幕上,而不必一直运行 stopMonitoringstartMonitoring

我想我可以将stopMonitoring 放在prepareForSegue 方法中,然后将startMonitoring 放在viewDidAppear 中,没有更简单的方法吗?

【问题讨论】:

我想,你忘了breaks :) 【参考方案1】:

很遗憾,没有更简单的方法可以做到这一点。

不过,您提到的计划听起来并没有那么糟糕。您实际上是在要求经理关闭和打开通知,它需要您告诉它何时这样做。

我是这样做的:

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    [manager startMonitoring];


- (void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];
    [manager stopMonitoring];

【讨论】:

谢谢,有时我会过度担心自己的方法,而事实证明它往往是正确的方法。我已经添加了一个更新来添加超级调用。 这也是我作为程序员最大的挣扎。不用担心。你今天写的任何东西明天都可以重构。这些天来,如果我发现我对完美解决方案的担忧和寻找阻碍了发货日期,只要我的方法适用于所有相关场景,我就会继续前进。关于调用 super 的好消息,我更新了我的示例代码。

以上是关于仅在提供的控制器上使用 AFNetworking 监控可达性的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 仅在请求成功时下载和保存数据

使用 AFNetworking 上传后图像不显示在浏览器上

AFNetworking iOS JSON 解析仅在黎巴嫩不正确

AFNetworking + 当前可达接口

iPhone UIView:是不是可以仅在子视图上启用用户交互?

仅在一个 .Net Core 2.0 Web API 控制器上出现 CORS 错误