我有一个使用Apples可访问性代码的应用。当我退出应用程序时,打开飞行模式,返回到应用程序,我正确地收到一条消息,指出没有可用的连接。如果我回去关闭飞行模式并返回应用程序,我仍然得到没有连接可用的消息。具体问题代码如下:
NetworkStatus status = kNotReachable;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
status = [self networkStatusForFlags: flags];
return status;
}
我进入if语句,标志最终为0(kSCNetworkReachabilityFlagsTransientConnection
)。这究竟是什么意思?有没有人经历过这个,有没有人知道解决方法或修复?几个小时一直在玩它......
答案 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)
我遇到了同样的问题,但只是在我在模拟器中进行测试时才会发生。我花了两天时间疯了,然后我在设备上进行了测试,它起到了魅力的作用! 不知道为什么......