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 に答える