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

时间:2013-06-22 20:21:29

标签: iphone ios objective-c afnetworking reachability

我只想知道如何在每次打开已连接到互联网的应用程序时阻止我的警报视图出现。如果有帮助,我正在使用ARC。

这是我在AppDelegate里面的didFinishLaunchingWithOptions方法中的代码:

__weak id myself = self; // to silence warning for retain cycle
_httpClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://apple.com"]];
    [_httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusNotReachable:
            {
                // Not reachable
                NSLog(@"Not connected to the internet");
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Not connected to the internet" delegate:myself cancelButtonTitle:nil otherButtonTitles:@"Dismiss", nil];
                [alert show];

                break;
            }
            case AFNetworkReachabilityStatusReachableViaWiFi:
            {
                NSLog(@"Connected to the internet via WiFi");
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Connected to the internet via WiFi" delegate:myself cancelButtonTitle:nil otherButtonTitles:@"Dismiss", nil];
                [alert show];

                break;
            }
            case AFNetworkReachabilityStatusReachableViaWWAN:
            {
                NSLog(@"Connected to the internet via WWAN");
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Connected to the internet" delegate:myself cancelButtonTitle:nil otherButtonTitles:@"Dismiss", nil];
                [alert show];

                break;
            }
            default:
                break;
        }
    }];

3 个答案:

答案 0 :(得分:1)

回应@ D80Buckeye:只是不要弹出可达性警报。这完全是不必要的,并且不会为用户体验添加任何内容(这不像用户可以做任何事情来解决这种缺乏可达性)。如果有的话,您可以显示网络可达性的非模态指示。

答案 1 :(得分:0)

如何创建全局标志

static BOOL g_FirstTime = YES;

并在显示警报视图之前进行检查

if (g_FirstTime) {
    g_FirstTime = NO;
    break;
}

NSLog(@"Connected to the internet via WiFi");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Connected to the internet via WiFi" delegate:myself cancelButtonTitle:nil otherButtonTitles:@"Dismiss", nil];
[alert show];
break;

答案 2 :(得分:0)

在不知道项目范围的情况下,很难提出可靠的建议。我全心全意的建议是,每次最终用户在网络上反弹时,您都不希望弹出窗口。如果您已经实现了可靠地检测刷新的网络连接的代码,如果我是你,我会把某种微妙的(但很明显的)屏幕指示器放在一个小图标/图像上,或者甚至是一个说“连接”的UILabel或“断开连接”或任何措辞对你有用。正如其他人所建议的那样,我完全避免为该警报实例化任何类型的弹出窗口。

关于代码本身 - 熟悉View Controller ProgrammingiOS App Programming Guide。在这两个文档之间,您可以正确地确定如何检测和响应应用程序何时进入和退出后台状态,何时启动,何时处于活动状态,何时显示/加载等等。并结合这些方法和组合。调用一些全局的状态驱动变量,你应该顺利完成。

底线是您想熟悉这些应用状态文档以及[[NSNotificationCenter defaultCenter] addObserver:<#(id)#> selector:<#(SEL)#> name:<#(NSString *)#> object:<#(id)#>]

如果这没有意义,请告诉我。