How to return BOOL when checking internet connection in XCODE

前端 未结 4 1110
自闭症患者
自闭症患者 2021-01-23 03:52

I want to be able to check for internet connectivity when my View loads. To predetermine the contents of my view.

I have the following viewDidLoad method:



        
相关标签:
4条回答
  • 2021-01-23 03:54

    Best way is to use Reachability code. Check here for apple sample code. That has a lot of convenience methods to check internet availability, Wifi/WAN connectivity check etc..

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil];
    
    reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];
    
    - (void)networkChanged:(NSNotification *)notification
    {
    
      NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
    
      if(remoteHostStatus == NotReachable) { NSLog(@"not reachable");}
      else if (remoteHostStatus == ReachableViaWiFiNetwork) { NSLog(@"wifi"); }
      else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { NSLog(@"carrier"); }
    }
    
    0 讨论(0)
  • 2021-01-23 04:04

    Yo can respect the asynchronicity in the implementation and modify the signature of the method to accept a block too.

    First you typedef your new block in the header

    typedef void(^ReachabilityCompletionBlock)(BOOL reachable);
    

    then

    - (void)isInternetReachable:(ReachabilityCompletionBlock)paramReachabilityBlock
    {
        NSLog(@"Starting connection test");
    
        internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
    
        // Internet is reachable
        internetReachableFoo.reachableBlock = ^(Reachability*reach){
        // Update the UI on the main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"We have internet");
            paramReachabilityBlock(YES); 
            });
        };
    
        // Internet is not reachable
        internetReachableFoo.unreachableBlock = ^(Reachability*reach){
        // Update the UI on the main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"We do not have internet");
            paramReachabilityBlock(NO);
            });
        };
    
        [internetReachableFoo startNotifier];
    }
    
    0 讨论(0)
  • 2021-01-23 04:13

    What i do in My Projects :

    Create a custom class CheckInternet of type NSObject

    in CheckInternet.h file

    + (BOOL) isInternetConnectionAvailable;
    

    and in CheckInternet.m file

    + (BOOL) isInternetConnectionAvailable
    {
    Reachability *internet = [Reachability reachabilityWithHostName: @"www.google.com"];
    NetworkStatus netStatus = [internet currentReachabilityStatus];
    bool netConnection = false;
    switch (netStatus)
    {
        case NotReachable:
        {
            NSLog(@"Access Not Available");
            netConnection = false;
            break;
        }
        case ReachableViaWWAN:
        {
            netConnection = true;
            break;
        }
        case ReachableViaWiFi:
        {
            netConnection = true;
            break;
        }
    }
    return netConnection;
    }
    

    import this class to your desired class, Now you can access as

    in viewDidLoad or any other method where you want

    if ([CheckInternet isInternetConnectionAvailable])
    {
        // internet available
    }
    else
    {
        // no internet
     }
    
    0 讨论(0)
  • 2021-01-23 04:15

    I think you can use the Apple provided Reachability class. There is a method: - (NetworkStatus)currentReachabilityStatus;

    As it returns NetworkStatus. You can use this value directly or inside your function reachabilityStatus != NotReachable

    0 讨论(0)
提交回复
热议问题