即使无线可用,SCNetworkReachabilityGetFlags也会返回0

时间:2011-02-03 17:30:21

标签: iphone networking reachability

我有一个使用Apples可访问性代码的应用。当我退出应用程序时,打开飞行模式,返回到应用程序,我正确地收到一条消息,指出没有可用的连接。如果我回去关闭飞行模式并返回应用程序,我仍然得到没有连接可用的消息。具体问题代码如下:

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

我进入if语句,标志最终为0(kSCNetworkReachabilityFlagsTransientConnection)。这究竟是什么意思?有没有人经历过这个,有没有人知道解决方法或修复?几个小时一直在玩它......

4 个答案:

答案 0 :(得分:10)

我发现这是因为主机名提供了协议说明符(例如http://hostname而非hostname)。尝试单独指定主机名,看看这是否可以解决您的问题。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

如果收到标志并且它们最终为0,正如您所见,这表示飞行模式已开启。但是,这种检查的结果似乎是缓存的,至少在很短的时间内。试试这个:离开你的应用程序,关闭飞机模式,在Mobile Safari中点击一个站点,然后返回到你的应用程序。这可能会使缓存失效。

答案 3 :(得分:0)

我遇到了同样的问题,但只是在我在模拟器中进行测试时才会发生。我花了两天时间疯了,然后我在设备上进行了测试,它起到了魅力的作用! 不知道为什么......