仅在呈现的控制器上使用AFNetworking监控可达性

Stu*_*rtM 6 reachability ios afnetworking ios6 afnetworking-2

我正在使用AFNetworking 2.0来监控Reachability.

在我的主要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;
    }

}];
Run Code Online (Sandbox Code Playgroud)

在这个主VC的顶部,我加载不同的视图控制器/路径/导航控制器,并在使用它们后解除.

问题 我要做的是监控连接,但仅在显示主VC时.例如,如果我在主VC上加载导航控制器并且连接丢失,我仍然会接到调用reachabilityNotReachableAlert.

怎样才能当屏幕上显示的主要VC,而不必运行我只监控stopMonitoringstartMonitoring所有的时间?

我想我可以把方法放进去stopMonitoring,prepareForSegue然后startMonitoringviewDidAppear,有没有更简单的方法来做到这一点?

dji*_*i33 2

不幸的是,没有,没有更简单的方法可以做到这一点。

不过,你提到的计划听起来并没有那么糟糕。您实质上是在要求经理关闭和打开通知,并且需要您告诉它何时执行此操作。

我是这样做的:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [manager startMonitoring];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [manager stopMonitoring];
}
Run Code Online (Sandbox Code Playgroud)