iphone - 互联网连接测试

标签 iphone ios

<分区>

大家。

您认为下面的代码适合检查 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
    }

最佳答案

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

.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

}

关于iphone - 互联网连接测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056277/

上一篇:iphone - iOS:推送通知并在登录时重新注册设备。

下一篇:ios - 用重音符号替换字符 - ios

相关文章:

ios - 基本开关错误

iOS 9 - 在通过 SFSafariViewController 加载的网页底部隐藏工具栏

iphone - NSDictionary 变量未传递给其他方法

iphone - 加载 Facebook 好友到 UITableView

iphone - Sqlite 数据库不支持哪些操作?

ios - 如何在 ios 中使用不同的 api 在 Debug模式和 Release模式下运行应用程序

iphone - 如何将视频添加到应用程序

ios - wowza如何直播多个音频输入?

iphone - 我的应用程序中的水平分页

iOS - 无法从 switch 语句跳转到此 case 标签?