iphone - 可达性有时会失败,即使我们确实有互联网连接

标签 iphone objective-c

我已经搜索过但没有看到类似的问题。

我添加了一种方法来根据可达性示例检查互联网连接。它在大多数时间都有效,但是当安装在 iPhone 上时,即使我有互联网连接(仅在 3G/EDGE 上 - WiFi 可以),它也经常失败。

基本上下面的代码返回 NO。

如果我切换到另一个应用程序,例如 Mail 或 Safari,然后连接,然后切换回该应用程序,代码会显示可以访问互联网。有点像它需要一个“插入”。

有人见过这个吗?有什么想法吗?

非常感谢 詹姆斯

+ (BOOL) doWeHaveInternetConnection{

BOOL success;
// google should always be up right?!
const char *host_name = [@"google.com" cStringUsingEncoding:NSASCIIStringEncoding];

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
                                                                            host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
BOOL isAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);

if (isAvailable) {
    NSLog(@"Google is reachable: %d", flags);
}else{
    NSLog(@"Google is unreachable");
}

return isAvailable;

最佳答案

看起来您已经从 Apple 示例代码中删除了一些基本的可达性代码。当您保持原样并执行此操作时会发生什么?

Reachability *hostReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];

NetworkStatus netStatus = [hostReach currentReachabilityStatus];

if (netStatus == NotReachable)
{
    NSLog(@"NotReachable");
}

if (netStatus == ReachableViaWiFi)
{
    NSLog(@"ReachableViaWiFi");
}

if (netStatus == ReachableViaWWAN)
{
    NSLog(@"ReachableViaWWAN");
}

关于iphone - 可达性有时会失败,即使我们确实有互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281232/

相关文章:

ios NSMutableDictionary 到 JSON 的转换给出了错误的格式

iphone - iOS - 在纵向和横向模式之间切换时如何旋转每个 subview

iOS RTP 实时音频接收

iphone - 为什么这个对象没有被添加到这个数组中?

iphone - 核心数据 - 如何检查托管对象的属性是否已被释放?

iphone - 我的应用程序文本的配置文件

ios - Crashlytics 没有向我的 Fabric 仪表板发送崩溃报告?

ios - 将容器 View 与 Storyboard和导航一起使用

ios - BLE后台重连

objective-c - 以编程方式与 charles 代理服务器 HTTP 请求和响应通信