// 是否wifi
    + (BOOL) IsEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }    // 是否3G
    + (BOOL) IsEnable3G {
        return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
    }    这样判断设备网络是3G环境和WIFI环境,那么在没有WIFI也没有3G的情况怎么检测?(!IsEnableWIFI && !IsEnable3G)?    我想检测是否已不能连接上网络,一定要调用Reachability reachabilityWithHostName:@“URL”这个么?    我现在的难题是,不知道如何检测连接已断开。
    

解决方案 »

  1.   

    两个括起来,if语句如果是这两个就走你的  反之看你是return还是什么
      

  2.   

    [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable这样就是没有网络连接
      

  3.   

    typedef enum {
    NotReachable = 0,   //无网络
    ReachableViaWiFi,  //wifi 网络
    ReachableViaWWAN // 3g网络
    } NetworkStatus;reachability有三个状态,分别对应注释里面的,(wifi 和3g都是有网络状态)。你的判断是不对的。
      

  4.   

    Reachability *  wStatus = [Reachability reachabilityWithHostName:@"www.baidu.com"];
        if ([wStatus currentReachabilityStatus] == NotReachable) {//这是没有网络 的情况
    }else {
     } 管他3G wif 2G   
      

  5.   

    -(BOOL)connectedToNetWork
    {
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);

    if (!didRetrieveFlags) {
    printf("Error. Count not recover network reachability flags\n");
    return NO;
    }

    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    return (isReachable && !needsConnection) ? YES : NO;
    }使用这个方法先检查是否有网络连接,在进行网络类型的判断,另外2G和3G的网络是可以通过Reachability区分出来的