2012-09-25 14 views

risposta

19

Si dovrebbe sempre preferire il rilevamento di metodi/funzionalità disponibili piuttosto che versioni di iOS e quindi assumere che un metodo sia disponibile.

Vedere Apple documentation.

Per esempio, in iOS 5 per visualizzare una vista di controllo modale vorremmo fare qualcosa di simile:

[self presentModalViewController:viewController animated:YES]; 

In iOS 6, il metodo di UIViewControllerpresentModalViewController:animated: è deprecato, è necessario utilizzare presentViewController:animated:completion: in iOS 6, ma come fai a sapere quando usare cosa?

È possibile rilevare la versione di iOS e avere un'istruzione if se si utilizza il primo o il secondo ma, questo è fragile, si commette un errore, forse un nuovo SO in futuro avrà un nuovo modo di farlo .

Il modo corretto per gestire questa situazione è:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)]) 
    [self presentViewController:viewController animated:YES completion:^{/* done */}]; 
else 
    [self presentModalViewController:viewController animated:YES]; 

Si potrebbe anche sostenere che si dovrebbe essere più rigorosa e fare qualcosa di simile:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)]) 
    [self presentViewController:viewController animated:YES completion:^{/* done */}]; 
else if([self respondsToSelector:@selector(presentViewController:animated:)]) 
    [self presentModalViewController:viewController animated:YES]; 
else 
    NSLog(@"Oooops, what system is this !!! - should never see this !"); 

sono incerti circa la vostra UIActionSheet esempio, per quanto ne so, questo è lo stesso su iOS 5 e 6. Forse stai pensando a UIActivityViewController per la condivisione e potresti voler eseguire il fallback su un UIActionSheet se sei su iOS 5, quindi potresti controllare che una classe sia disponibile, vedere here come farlo.

+1

Grazie per l'aiuto! Una risposta straordinariamente bella! –

+0

Un piacere e grazie per il about.me complimenti – Daniel

+0

Puoi collegare al framework nelle impostazioni del progetto, in tal caso che il framework potrebbe non essere presente su tutte le versioni, come nel tuo caso, devi semplicemente impostare l'inclusione come facoltativa piuttosto richiesto. ---- la domanda è stata cancellata .... domanda/commento. – Daniel