Domanda

C'è così tanto informazioni là fuori sull'utilizzo esempio raggiungibilità di Apple, e così tanto è in conflitto. Sto cercando di scoprire di che sto usando (raggiungibilità 2.0) in modo corretto sotto. Il mio caso d'uso App è questo: se una connessione a internet è disponibile tramite qualunque mezzo (WiFi, LAN, EDGE, 3G, etc.) un UIButton ( "See More") è visibile su vari punti di vista. Se nessuna connessione, il pulsante non è visibile. Il "See More" parte non è critica in alcun modo l'applicazione, è solo un add-on. "See More" potrebbe essere visibile o meno in qualsiasi momento durante il ciclo di vita dell'applicazione, come la connessione è stabilita o persa. Ecco come ho fatto -? È questo corretto e / o c'è un modo migliore

Ogni aiuto è molto apprezzato! 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
È stato utile?

Soluzione

Perché non rootViewController.bConnection = (netStatus != NotReachable);, che continuerà a funzionare se aggiungere un altro tipo di connettività?

sguardi (BOOL *) come un errore (è equivalente a (signed char *)). In generale, preferisco bool di C99 e la specifica C99 permette appositamente per bool blah:1; se siete preoccupati per lo spazio.

Inoltre, fare attenzione con l'idea che è possibile controllare la presenza di una "connessione ad internet" - è possibile verificare la presenza di una connessione di rete, ma l'ISP potrebbe essere verso il basso, o l'host che si desidera connettersi potrebbe essere verso il basso, o qualcuno potrebbe aver forato attraverso un cavo sottomarino. Se kHostName è il nome host a cui tieni la connessione a, allora farà la cosa giusta.

Altri suggerimenti

Grazie per la rapida risposta! Quindi quello che sto raduno è tutto quello che dobbiamo fare è di cambiare la precedenza a:

- (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); 
    } 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top