0

大家。

您认为下面的代码适合检查 iOS 中的互联网连接吗?如果我保留它,我会有什么问题吗?是不是太弱了?到目前为止,它对我来说没有问题。你怎么看?谢谢你。

    stringToURL = [NSString [NSString stringWithFormat: @"http://www.mycompany.com/File.csv"];
    url = [NSURL URLWithString:stringToURL];
    NSError *error = nil;
    content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
    if (error != nil) {
            //Do something
    } else {
            //Keep running the app
    }
4

2 回答 2

1

使用以下代码检查互联网连接,

.h

#import <Foundation/Foundation.h>

@interface NetworkConnectivity : NSObject

+ (BOOL)hasConnectivity;

@结尾

.m

#import "NetworkConnectivity.h"
#import <sys/socket.h>
#import <netinet/in.h>
#import <SystemConfiguration/SystemConfiguration.h>

@implementation NetworkConnectivity


+ (BOOL)hasConnectivity {

    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);

    if(reachability != NULL) {

        SCNetworkReachabilityFlags flags;

        if (SCNetworkReachabilityGetFlags(reachability, &flags)) {

            if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
            {
                // if target host is not reachable
                return NO;
            }

            if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
            {
                // if target host is reachable and no connection is required
                //  then we'll assume (for now) that your on Wi-Fi
                return YES;
            }


            if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
                 (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
            {
                // ... and the connection is on-demand (or on-traffic) if the
                //     calling application is using the CFSocketStream or higher APIs

                if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
                {
                    // ... and no [user] intervention is needed
                    return YES;
                }
            }

            if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
            {
                // ... but WWAN connections are OK if the calling application
                //     is using the CFNetwork (CFSocketStream?) APIs.
                return YES;
            }
        }
    }

    return NO;
}


@end

然后检查你想要的地方,

if ([NetworkConnectivity hasConnectivity]) {

    // Internet available

} else {

    // Internet not available

}
于 2013-06-12T04:12:23.587 回答
0

将 Tony Million 版本的 Reachability.h 和 Reachability.m 添加到项目中 在这里找到:https ://github.com/tonymillion/Reachability

于 2013-06-12T04:18:09.867 回答