错误的可达性状态-Boolean值未在iOS中设置

时间:2014-02-23 09:24:54

标签: ios ios7 boolean

我有一个Boolean值,可以使用以下代码检查Reachability

@property (nonatomic,assign) BOOL isOnline;



[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];

    Reachability * reach = [Reachability reachabilityWithHostname:@"www.google.com"];

    reach.reachableBlock = ^(Reachability * reachability)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"Reachable");
            self.isOnline = YES;
        });
    };

    reach.unreachableBlock = ^(Reachability * reachability)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.isOnline = NO;
            NSLog(@"Unable");
        });
    };

    [reach startNotifier];

但是当我用

检查时
if(self.isOnline == YES)
    {
NSLog(@"YES");
}

else{
NSLog(@"NO");
}

它只显示NO。我确信Reachability可以访问互联网并且我有联系。但Boolean值未设置为YES

我该怎么做?

1 个答案:

答案 0 :(得分:2)

似乎你正在使用Tony Million的Reachability,所以我建议的第一件事是使用isReachable函数。

其次,在iOS7中存在此可访问性问题所以要解决此问题,您必须执行以下操作

Reachability.m中的函数-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags中,您必须提交一行

#if TARGET_OS_IPHONE
    if(flags & kSCNetworkReachabilityFlagsIsWWAN)
    {
       // We're on 3G.
       if(!self.reachableOnWWAN)
          {
          // We don't want to connect when on 3G.
          // Comment this line
           //connectionUP = NO;

         }
    }
#endif