使用Reachability检查Internet连接不起作用

时间:2014-02-18 05:36:21

标签: ios objective-c reachability

嗨,我正在尝试检查我的应用程序中的互联网连接。所以我已经在项目中导入了可达性h文件和m文件。我现在遇到了一些问题。只有在没有网络连接的情况下才能使用互联网连接才能正常工作..

这里是使用过的代码..

-(BOOL)reachable {
Reachability *reach = [Reachability reachabilityWithHostName:@"https://www.google.co.in/"];
NetworkStatus internetStatus = [reach currentReachabilityStatus];
if(internetStatus == NotReachable) {

    UIAlertView *alertOne = [[UIAlertView alloc]initWithTitle:@"Internet" message:@"You dont have internet connection to send message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
    [alertOne show];
    [alertOne release];


}

    return YES;
}

我已经在其他项目中使用了相同的代码,但是在这里它显示了互联网连接时的警报信息,当它没有连接时它没有显示...

这个viewdidload代码......

[super viewDidLoad];
[self reachable];

请告诉我如何解决这个问题......

感谢

3 个答案:

答案 0 :(得分:1)

这可能不是问题的原因,但在reachable中呼叫viewDidLoad并且始终是错误的。原因是viewDidLoad 方式太早,无法调用可能会显示警报视图的代码。在viewDidLoad中,您的视图尚未出现在界面中。

另一个非常奇怪的事情是你的reachable方法都检测到可达性并提出警报。它返回一个BOOL,但你扔掉它。你应该说

if (![self reachable]) { // ...

并在那里放置警报视图,而不是reachable方法。

另一个非常奇怪的事情是,reachable方法总是返回YES。那太疯狂了。如果URL可以访问,则应返回YES,否则返回NO。否则,返回BOOL的重点是什么?

答案 1 :(得分:1)

尝试以下代码

Reachability *reach = [Reachability reachabilityForInternetConnection];
//(or)
Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.google.com"];

    NetworkStatus netStatus = [reach currentReachabilityStatus];
    if (netStatus != NotReachable)
    {
        //Reachable ..Network connection is available
    }
    else
    {
        //NSLog(@"Network Error No Network Available ");


        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Please connect to an Internet connection to Register" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil , nil];

        [alertView show];

    }

它适合你...

答案 2 :(得分:-1)

请按照以下步骤操作

1>制作可达性和NetworkStatus的属性;
 在你的appDelegate.h

 @interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>{
    Reachability* reachability;
   NetworkStatus remoteHostStatus;

}
@end

2&gt;在applicationDidBecomeActive

中更改可达性时创建通知方法
  - (void)applicationDidBecomeActive:(UIApplication *)application
{    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];
    reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];
    remoteHostStatus = [reachability currentReachabilityStatus];

    if(remoteHostStatus == NotReachable) {
        if(DEBUG_MODE){NSLog(@"no");}

    }
    else if (remoteHostStatus == ReachableViaWiFi) {if(DEBUG_MODE)
    {NSLog(@"wifi");}

    }
    else if (remoteHostStatus == ReachableViaWWAN) {if(DEBUG_MODE){NSLog(@"cell");}

    }

}

3&GT;声明reachabilityChanged

    -(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags
{

 if([self isReachableWithFlags:flags])
    {
        if(self.reachableBlock)
        {
            self.reachableBlock(self);
        }
    }
else
{
    if(self.unreachableBlock)
    {
        self.unreachableBlock(self);
    }
}

// this makes sure the change notification happens on the MAIN THREAD
dispatch_async(dispatch_get_main_queue(), ^{
    [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification
                                                        object:self];
});

}

感谢。