How to return BOOL when checking internet connection in XCODE

北城以北 提交于 2019-12-02 01:40:41

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
 }

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

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

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];
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!