AFNetworking 2.0 可达性警报始终显示

Posted

技术标签:

【中文标题】AFNetworking 2.0 可达性警报始终显示【英文标题】:AFNetworking 2.0 Reachability alert always showing 【发布时间】:2015-02-12 07:12:31 【问题描述】:

我正在使用 AFNetworking 2.0 进行网络调用。我正在使用下面的代码来实现可访问性。我的问题是当我打开应用程序时总是显示“未连接”警报。该应用程序似乎需要一段时间才能连接到网络,并且延迟导致警报弹出。有没有什么办法解决这一问题?我不希望每次都弹出“未连接”警报并让用户感到困惑。

 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) 
        NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));

        switch (status) 
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"No Internet Connection");
                UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Not connected"
                                                                  message:@"You have no network connection"
                                                                 delegate:nil
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];

                [message show];
            
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WIFI");


               
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"4G");
            
                break;
            default:
                NSLog(@"Unkown network status");

                break;
        
    ];
    [[AFNetworkReachabilityManager sharedManager]startMonitoring];

    if ([[AFNetworkReachabilityManager sharedManager] isReachable] == NO) 
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Not connected"
                                                          message:@"You're not connected to the internet. Please connect via WiFi or data plan"
                                                         delegate:nil
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];
        [message show];

        //this shows all the time - why?
    

【问题讨论】:

【参考方案1】:

将此代码放入您的AppDelegate 在此方法didFinishLaunchingWithOptions 中。它只会显示一次消息。

internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
    internetReachableFoo.reachableBlock = ^(Reachability*reach)
    
        dispatch_async(dispatch_get_main_queue(), ^
            NSLog(@"Yayyy, we have the interwebs!");

        );
    ;
    internetReachableFoo.unreachableBlock = ^(Reachability*reach)
    
        dispatch_async(dispatch_get_main_queue(), ^
        UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
         [alrt show];
        );
    ;
    [internetReachableFoo startNotifier];

【讨论】:

【参考方案2】:

因为 AFNetworkReachabilityManager 通过通知刷新其状态。 所以当你打电话时

[AFNetworkReachabilityManager sharedManager] isReachable]

立即开始监控后,状态未准备好。

【讨论】:

我尝试将警报放在不同的位置,以便它有机会做好准备,但我仍然收到警报。这有什么好的做法?

以上是关于AFNetworking 2.0 可达性警报始终显示的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 可达性不起作用

AFNetworking 2.0。如何检查套接字的可达性状态(managerForAddress :)?

AFNetworking 2.0:isReachable 总是返回 False

防止在首次启动 iOS 时调用 AFNetworking 可达性状态

带有 OAuth2 令牌的 AFNetworking 2.0

AFNetworking - 可达性总是返回 -1