2010-05-26 6 views
0

Apple의 Reachability 예제를 사용하는 데 너무 많은 정보가 있으며 많은 부분이 충돌합니다. 나는 그것을 아래에서 올바르게 (Reachability 2.0) 사용하고 있음을 알아 내려고하고있다. 내 앱의 사용 사례는 다음과 같습니다. 인터넷 연결이 어떤 수단 (예 : wifi, LAN, Edge, 3G 등)을 통해 가능하면 다양한보기에서 UIButton ("자세히보기")을 볼 수 있습니다. 연결이 없으면 버튼이 표시되지 않습니다. "더보기"부분은 앱에 어떤 식 으로든 중요하지 않습니다. 단지 부가 기능입니다. "더보기"는 연결이 설정되거나 끊어짐에 따라 응용 프로그램 수명주기 동안 언제든지 표시되거나 표시되지 않을 수 있습니다. 여기 내가 어떻게 해냈는지 -이게 맞습니까? 더 좋은 방법이 있습니까?도달 가능성 (2.0) 사용 사례 확인

도움이 많이 감사드립니다! 왜 rootViewController.bConnection = (netStatus != NotReachable); LQ

// AppDelegate.h 

#import "RootViewController.h" 

@class Reachability; 

@interface AppDelegate : NSObject <UIApplicationDelegate> 
{ 
    UIWindow *window; 
    UINavigationController *navigationController; 
    RootViewController *rootViewController; 
    Reachability* hostReach; 
    // NOT USED: Reachability* internetReach; 
    // NOT USED: Reachability* wifiReach; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 

@end 


// AppDelegate.m 

#import "AppDelegate.h" 
#import "Reachability.h" 

#define kHostName @"www.somewebsite.com" 

@implementation AppDelegate 

@synthesize window; 
@synthesize navigationController; 
@synthesize rootViewController; 

- (void) updateInterfaceWithReachability: (Reachability*) curReach { 

    if(curReach == hostReach) { 

     NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
     BOOL connectionRequired = [curReach connectionRequired]; 

     // Set a Reachability BOOL value flag in rootViewController 
     // to be referenced when opening various views 

     if ((netStatus != ReachableViaWiFi) && (netStatus != ReachableViaWWAN)) { 
      rootViewController.bConnection = (BOOL *)0; 
     } else { 
      rootViewController.bConnection = (BOOL *)1; 
     } 

    } 
} 

- (void) reachabilityChanged: (NSNotification*)note { 

    Reachability* curReach = [note object]; 
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]); 
    [self updateInterfaceWithReachability: curReach]; 
} 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    // NOTE: #DEFINE in Reachability.h: 
    // #define kReachabilityChangedNotification @"kNetworkReachabilityChangedNotification" 

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; 

    hostReach = [[Reachability reachabilityWithHostName: kHostName] retain]; 
    [hostReach startNotifer]; 
    [self updateInterfaceWithReachability: hostReach]; 

    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 

} 

- (void)dealloc { 
    [navigationController release]; 
    [rootViewController release]; 
    [window release]; 
    [super dealloc]; 
} 

@end 

답변

1

, 그들은 연결의 다른 유형을 추가 할 경우 여전히 작동 할 것인가?

(BOOL *)은 실수로 보입니다 ((signed char *)과 동일). 일반적으로 나는 C99의 bool을 선호하고 C99 사양은 공간에 대해 걱정이된다면 특별히 bool blah:1;을 허용합니다.

또한 "인터넷 연결"을 확인할 수 있다는 생각에주의하십시오 - 네트워크 연결을 확인할 수는 있지만 ISP가 다운되었거나 연결할 호스트가 다운되었거나 누군가 해저 케이블을 통해 뚫을 수있었습니다. kHostName이 연결에 신경 쓰는 호스트 이름이면 올바른 일을 할 것입니다.

0

빠른 응답을 보내 주셔서 감사합니다. 그래서 내가 수집하는 것은 위를 다음과 같이 변경하는 것입니다.

관련 문제