2011-02-03 107 views
4

我有一个使用Apples可达性代码的应用程序。当我退出应用程序,打开飞行模式,回到应用程序,我正确地得到一条消息,说没有可用的连接。如果我退出时关闭飞行模式并返回到应用程序,我仍然收到没有连接可用的消息。具体问题的代码是这样的:即使无线可用,SCNetworkReachabilityGetFlags也会返回0

NetworkStatus status = kNotReachable; 
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) 
{ 
    status = [self networkStatusForFlags: flags]; 
    return status; 
} 

我进去if语句和标志结束是0(kSCNetworkReachabilityFlagsTransientConnection)。这是什么意思?有没有人经历过这个,有谁知道解决方法或修复?一直玩它几个小时...

+0

kSCNetworkReachabilityFlagsTransientConnection的值为1 << 0(它是1)。你得到0,这意味着没有设置标志。 – jhabbott 2012-01-06 17:21:26

+0

@PsychoDad你是如何解决这个问题的? – Sandeep 2013-04-25 19:39:45

+0

@Sandeep我认为问题出在一些非常糟糕的公司WiFi上。一年多来我还没有看到这个问题。 – jjxtra 2013-04-25 20:54:46

回答

10

我发现这是由提供协议说明符的主机名引起的(如http://hostname而不是hostname)。尝试单独指定主机名以查看是否可以修复您的问题。

0

如果收到的标志,他们最终为0,如你所见,这表明飞行模式打开。但是,这个检查的结果似乎被缓存了,至少在很短的时间内。试试这个:离开你的应用程序,关闭飞行模式,在移动Safari中打一个网站,然后返回到你的应用程序。这可能会使缓存无效。

1

调用SCNetworkReachabilityGetFlags之后,还需要调用CFRelease以避免缓存网络状态。请参阅下面的实现:

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);

SCNetworkReachabilityFlags flags; 
success = SCNetworkReachabilityGetFlags(reachability, &flags); 
bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
!(flags & kSCNetworkFlagsConnectionRequired); 
CFRelease(reachability); 
if (isAvailable) { 
    NSLog(@"Host is reachable: %d", flags); 
    return true; 
}else{ 
    NSLog(@"Host is unreachable"); 
    return false; 
} 
0

我有同样的问题,但只有当我在模拟器中测试时才会发生。我花了2天时间疯了,然后在设备上进行测试,它的功能非常强大! 不知道为什么...

相关问题