2010-05-26 2 views
0

Существует так много информации о том, что можно использовать пример использования Apple, и так много противоречит. Я пытаюсь выяснить, как я использую его (Reachability 2.0) правильно ниже. Мое приложение для использования в этом случае: если интернет-соединение доступно любыми средствами (Wi-Fi, LAN, Edge, 3G и т. Д.), UIButton («См. Больше») отображается на разных экранах. Если соединение отсутствует, кнопка не отображается. Часть «Подробнее» НЕ имеет никакого отношения к приложению, это просто дополнительная функция. «See More» может быть видимым или не в любое время в течение жизненного цикла приложения, поскольку соединение установлено или потеряно. Вот как я это сделал - это правильно и/или есть лучший способ?Ищите возможности для достижения результатов (2.0) Проверка использования кода

Любая помощь очень ценится! 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

Почему не rootViewController.bConnection = (netStatus != NotReachable);, который все равно будет работать, если они добавляют еще один тип подключения?

(BOOL *) выглядит как ошибка (это эквивалентно (signed char *)). В общем, я предпочитаю C99's bool, а спецификация C99 специально позволяет использовать bool blah:1;, если вы беспокоитесь о пространстве.

Кроме того, будьте осторожны с идеей, что вы можете проверить «подключение к Интернету» - вы можете проверить подключение к сети, но ваш интернет-провайдер может быть недоступен, или хост, к которому вы хотите подключиться, может быть недоступен, или кто-то мог просверлить подводный кабель. Если kHostName - это имя хоста, к которому вы хотите подключиться, тогда оно поступит правильно.

0

Спасибо за быстрый ответ! Итак, все, что мне нужно сделать, это изменить приведенное выше значение:

- (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 

     rootViewController.bConnection = (netStatus != NotReachable); 
    } 
}