Objective c 检查internet连接可达性

Objective c 检查internet连接可达性,objective-c,reachability,Objective C,Reachability,我在我的应用程序中使用可达性检查互联网连接。 我如何有争议地检查用户的连接,如果他的连接失败或从wi-fi更改为3G,如何通知我 现在这是我的代码: - (void)viewDidLoad { [super viewDidLoad]; Reachability *myNetwork = [Reachability reachabilityWithHostname:@"google.com"]; NetworkStatus myStatus = [myNetwork currentReachab

我在我的应用程序中使用可达性检查互联网连接。 我如何有争议地检查用户的连接,如果他的连接失败或从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;
}
如何在加载应用程序之前检查interner连接,我在Appdelegate.m中尝试了此代码,但由于PerformsgueWithIdentifier方法而出错。

如何在加载应用程序之前检查interner连接

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


您试图实现什么目标?

要检查internet连接,您可以使用以下方法:

- (BOOL)connected {
    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [reachability currentReachabilityStatus];
    return !(networkStatus == NotReachable);
}
这将返回一个BOOL,您可以在条件中使用它来检查internet连接

注意:确保添加适当的框架,并在.m文件顶部添加以下内容:

#import "Reachability.h"
#import <SystemConfiguration/SystemConfiguration.h>
此外,还应为计时器创建ivar,以便在不再需要时使其失效,如:

if(timer) {
    [timer invalidate];
    timer = nil;
}

我找到了检查用户internet连接更改的答案:

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");
    });
};

这就是我尝试的,所以重点是我无法从appdelegate访问视图。我想做的是,在应用程序运行的每一秒检查互联网连接,若有任何变化发生,应用程序会向用户显示一条消息。我怎么能有争议地检查它?有争议地?你的意思是持续?--不幸的是,在显示根视图之前,您无法显示任何内容。我会在根视图控制器的viewdide中设置一个计时器,然后根据您的喜好随时检查它。不过,请注意,viewDidAppear可以被多次调用。嘿,我检查internet没有问题,我已经有了它。问题是我如何有争议地检查它?如果用户连接失败,我怎么知道呢?嗯,你可以使用NSTimer每隔一分钟左右检查一次,但你真的想要吗?您是否可以仅在用户准备执行需要网络连接的操作时进行检查?我在哪里可以设置在我的所有应用程序中有效的NSTimer?应用程序中有许多按钮和控件视图,我无法在每次操作中检查互联网连接,我需要一些类似于委托的东西,以便在互联网连接发生变化时通知我。这对我来说很重要,因为如果互联网连接失败,应用程序就会崩溃
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");
    });
};