0

我在我的应用程序中使用可达性检查互联网连接。如果用户连接失败或从 wi-fi 更改为 3G,我如何有争议地检查用户连接,如何通知我?

现在这是我的代码:

- (void)viewDidLoad
{
[super viewDidLoad];

Reachability *myNetwork = [Reachability reachabilityWithHostname:@"google.com"];
NetworkStatus myStatus = [myNetwork currentReachabilityStatus];

switch (myStatus) {
    case NotReachable:
    { NSLog(@"There's no internet connection at all.");
        [self performSegueWithIdentifier: @"noInternet" sender: self];
    }
        break;

    case ReachableViaWWAN:
        NSLog(@"We have a 3G connection");
        break;

    case ReachableViaWiFi:
        NSLog(@"We have WiFi.");
        break;

    default:
        break;
}

如何在我的应用程序加载之前检查内部连接,我在 Appdelegate.m 中尝试了此代码,但由于 performSegueWithIdentifier 方法而出现错误。

4

3 回答 3

1

如何在我的应用加载之前检查内部连接

可以在 appdelegate 中检查互联网连接。你只是不能做任何事情来通知用户。在发出警报之前,您需要窗口(我相信第一个视图)。

你想达到什么目的?

于 2013-08-06T21:19:12.300 回答
0

要检查互联网连接,您可以使用以下命令:

- (BOOL)connected {
    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [reachability currentReachabilityStatus];
    return !(networkStatus == NotReachable);
}

这将返回一个 BOOL,您可以在条件中使用它来检查 Internet 连接。

注意:一定要添加正确的框架,并在 .m 文件的顶部添加以下内容:

#import "Reachability.h"
#import <SystemConfiguration/SystemConfiguration.h>

更新#1:

根据您的评论,您似乎想通过计时器测试连接性。以下代码将每秒检查一次互联网。不建议这样做,但这应该可以完成您的要求:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/60.0)
                                                  target:self
                                                selector:@selector(checkInterWeb)
                                                userInfo:nil
                                                 repeats:YES];

此外,您应该为计时器创建一个 ivar,以便在不再需要它时使其无效,如下所示:

if(timer) {
    [timer invalidate];
    timer = nil;
}
于 2013-08-06T21:22:17.543 回答
0

我找到了检查用户互联网连接变化的答案:

Reachability * reach = [Reachability reachabilityWithHostname:@"www.google.com"];

reach.reachableBlock = ^(Reachability * reachability)
{
    dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"Block Says Reachable") ;
    });
};

reach.unreachableBlock = ^(Reachability * reachability)
{
    dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"Block Says Unreachable");
    });
};
于 2013-08-07T14:34:11.160 回答