In cerca di raggiungibilità (2.0) Use Case di convalida
-
04-10-2019 - |
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
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);
}
}