5

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

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

我进入 if 语句,flags 最终为 0 ( kSCNetworkReachabilityFlagsTransientConnection)。这到底是什么意思?有没有人经历过这种情况,有没有人知道解决方法或修复方法?玩了几个小时...

4

4 回答 4

11

我发现这是由提供带有协议说明符的主机名引起的(例如,http://hostname而不是 just hostname)。尝试仅指定主机名,看看这是否能解决您的问题。

于 2012-01-06T18:10:36.963 回答
3

调用 SCNetworkReachabilityGetFlags 后,调用 CFRelease 以避免缓存网络状态也很重要。请参阅下面的我的实现:

SCNetworkReachabilityRef 可达性 = 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;
}
于 2013-01-17T14:24:58.347 回答
0

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

于 2011-05-16T19:16:29.390 回答
0

我有同样的问题,但它只发生在我在模拟器中测试时。我花了 2 天时间疯了,然后我在设备上进行了测试,它就像一个魅力!不知道为什么...

于 2017-08-01T10:23:26.500 回答