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

时间:2013-11-19 14:20:28

标签: ios ios6 afnetworking reachability afnetworking-2

我正在使用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,是否有更简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

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

然而,你提到的计划听起来并不那么糟糕。你基本上要求经理关闭和打开它的通知,它需要你告诉它什么时候这样做。

我是这样做的:

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

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [manager stopMonitoring];
}