如何使用可达性类来检测有效的Internet连接?

Cam*_*oft 15 objective-c reachability ios4 ios

我是iOS开发的新手,我正在努力让reachability.h类工作.这是我的视图控制器代码:

- (void)viewWillAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter]
     addObserver:self 
     selector:@selector(checkNetworkStatus:) 
     name:kReachabilityChangedNotification 
     object:nil];

    internetReachable = [Reachability reachabilityForInternetConnection];
    [internetReachable startNotifier];
}

- (void)checkNetworkStatus:(NSNotification *)notice {
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    NSLog(@"Network status: %i", internetStatus);
}
Run Code Online (Sandbox Code Playgroud)

它看起来不错,但在运行应用程序并切换到该视图时,xcode控制台中没有任何内容出现.

我正在使用Reachability 2.2和iOS 4.2.

有什么明显的东西我做错了吗?

knu*_*uku 55

编辑:如果你想在一些代码执行之前检查可达性,你应该使用

Reachability *reachability = [Reachability reachabilityForInternetConnection];    
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
if (internetStatus != NotReachable) {
    //my web-dependent code
}
else {
    //there-is-no-connection warning
}
Run Code Online (Sandbox Code Playgroud)

您还可以在某处(即in viewDidLoad)添加可达性观察器:

Reachability *reachabilityInfo;
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(myReachabilityDidChangedMethod)
                                             name:kReachabilityChangedNotification
                                           object:reachabilityInfo];
Run Code Online (Sandbox Code Playgroud)

[[NSNotificationCenter defaultCenter] removeObserver:self];当您不再需要可达性检测时(即dealloc方法中),不要忘记打电话.


cod*_*ine 6

这是我如何做到的.我有一个我在init方法中设置的实例变量:

_reachability = [[APReachability reachabilityForInternetConnection] retain];
Run Code Online (Sandbox Code Playgroud)

当我需要查询网络状态时,我会:

NetworkStatus networkStatus = [_reachability currentReachabilityStatus];
if (networkStatus != NotReachable) {
    // Network related code
}
else {
    // No network code
}
Run Code Online (Sandbox Code Playgroud)

如果你关心wifi等,网络状态可以是:

    NotReachable // No network
    ReachableViaWiFi // Reachable via Wifi
    ReachableViaWWAN // Reachable via cellular
Run Code Online (Sandbox Code Playgroud)