Xcode 4 permette di sviluppare applicazioni per iPad o iPhone con target inferiore all’odierno iOS 4.3. Tuttavia lo stesso codice fornito con i template “pecca” di presunzione, dando per scontato che la nostra applicazione avrà come target iOS 4 o superiore. Nell’application delegate, ad esempio, Xcode inserisce le seguenti righe di codice:
1 2 3 4 5 6 7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } |
La proprietà rootViewController dell’oggetto window è stata introdotta con iOS 4. Questo significa che se proviamo la nostra applicazione con iOS 3.2 essa andrà “allegramente” in crash!
Di primo istinto si sarebbe tentati di verificare la versione di iOS, cioè controllare run-time (tempo di esecuzione) la versione del sistema operativo e utilizzare la “vecchia” chiamata [self.window addSubview:viewController.view];. Una strada migliore, a mio parere, è quella di sfruttare la caratteristica dinamica dell’Objective-C, nello specifico la capacità di verificare o meno la presenza di un metodo (nel nostro caso la capacità di verificare l’esistenza del metodo setRootViewController.
Utilizzando questo metodo, si ha il vantaggio di evitare controlli su “float” di versione, che possono cambiare nel tempo. Il codice che propongo è il seguente:
1 2 3 4 5 6 7 8 9 10 11 12 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. if ([self.window respondsToSelector:@selector(setRootViewController:)]) { self.window.rootViewController = self.viewController; } else { [self.window addSubview:self.viewController.view]; } [self.window makeKeyAndVisible]; return YES; } |









7
Non ci sono commenti per questo Post
Lascia un commento