0

我只想知道如何防止每次打开已连接到 Internet 的应用程序时出现警报视图。如果有帮助,我正在使用 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;
        }
    }];
4

3 回答 3

1

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

于 2013-06-22T22:17:59.973 回答
0

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

关于代码本身 - 非常熟悉View Controller ProgrammingiOS App Programming Guide。在这两个文档之间,您可以正确地绘制出如何检测和响应应用程序何时进入和退出后台状态、何时启动、何时变为活动状态、何时出现/加载视图等。结合这些方法和调用有一些全局状态驱动的变量,你应该一切顺利。

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

让我知道这是否没有意义。

于 2013-06-23T13:23:15.767 回答
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;
于 2013-06-23T02:10:12.497 回答