2011-02-04 16 views
1

私はiPhoneでウェブサイトからデータを動的に取得するアプリを開発しています.WifiとGPRSが接続されているかどうかを確認していますが、Wi-Fiにアクセスできない場合はAppがクラッシュします。ネットワーク接続を確認するiPhone

このメソッドを使用して接続を確認しています。 IPアドレスを持つ

+ (BOOL) isConnected { 
    // Part 1 - Create Internet socket addr of zero 
    struct sockaddr_in zeroAddr; 
    bzero(&zeroAddr, sizeof(zeroAddr)); 
    zeroAddr.sin_len = sizeof(zeroAddr); 
    zeroAddr.sin_family = AF_INET; 

    // Part 2- Create target in format need by SCNetwork 
    SCNetworkReachabilityRef target = 
    SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) &zeroAddr); 

    // Part 3 - Get the flags 
    SCNetworkReachabilityFlags flags; 
    SCNetworkReachabilityGetFlags(target, &flags); 

    // Part 4 - Create output 
    NSString *sNetworkReachable; 
    if (flags & kSCNetworkFlagsReachable) 
     sNetworkReachable = @"YES"; 
    else 
     sNetworkReachable = @"NO"; 

    NSString *sCellNetwork; 
    if (flags & kSCNetworkReachabilityFlagsIsWWAN) 
     sCellNetwork = @"YES"; 
    else 
     sCellNetwork = @"NO"; 


    // Get host entry info for given host 
    struct hostent *remoteHostEnt = gethostbyname("google.com"); 
    if(remoteHostEnt == nil) return NO; 

    // Get address info from host entry 
    struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0]; 

    // Convert numeric addr to ASCII string 
    char *sRemoteInAddr = inet_ntoa(*remoteInAddr); 

    NSString *s = [[NSString alloc] 
       initWithFormat: 
       @"Network Reachable: %@\n" 
       @"Cell Network: %@\n" 
       @"Remote IP: %s\n", 
       sNetworkReachable, 
       sCellNetwork, 
       sRemoteInAddr]; 


    // Add text 
    [sCellNetwork release]; 
    [sNetworkReachable release]; 

    NSLog(@"Message:%@",s); 

    return [sNetworkReachable isEqualToString:@"YES"]; 
} 

おかげ バディブル

答えて

4

なぜ混乱?あなたは代わりに直接SCNetworkReachabilityCreateWithName()を呼び出すことができます。到達可能性のサンプルアプリケーションの

SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "google.com"); 
2

検索をdeveloper.apple.com

に同じことを行いますが、ハンドラとしてブロックを使用していますGitHubの上のオープンソースNPReachabilityクラスもあります。

-1

非表示のUIWebViewを使用して、Webサイトを読み込むことができます。次に、ロードが成功したかどうかを検出するために、UIWebView.hのメソッドを使用します。

+0

これを行う理由はありません。 Appleは既にネットワークの到達可能性を確認するためのAPIを提供しています。 –

関連する問題