2012年1月24日

ネットワーク処理が可能か調べる

UIDeviceあたりで簡単にわかるのかと思ったら、意外と面倒なのね。
なんか調べるのが下手なのかもしれませんが。

まあ機器の状態だけでは計り知れない奥深さはあるのかもしれないけど。
しかしNSURLConnectionでエラー調べて、ってのはちょっとダルい。
いろいろ調べると、(いや、それほど調べてませんw)
http://stackoverflow.com/questions/741145/determining-internet-availability-on-iphone
に書いてあったのが短くて、動きも期待した通りだった。

↓は更に簡略化。(ここでの重複チェックは余計と思ったので)

- (BOOL)isDataSourceAvailable{
    Boolean success;    
    const char *host_name = "twitter.com"; //通信可能か調べたいホスト

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    BOOL isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);
    return isDataSourceAvailable;
}

確認したい時にしっかり確認できないと意味ねー、て思ったので簡略化しました。

SystemConfiguration.frameworkと
SystemConfiguration/SystemConfiguration.hの@import

が必要です。
なんて、これでいいのかな・・・。

しかし、「りーちゃびりてぃ」ねえ。
通信って面倒いなあ。


0 件のコメント:

コメントを投稿