2013-03-06 11 views
5

Nella mia app ho bisogno di presentare un controller di visualizzazione. Il metodo 6.0 per la presentazione di un controller di visualizzazione è presentViewController: animated: completion :. Voglio anche supportare 4.3. In 4.3 il metodo da chiamare è presentModalViewController: animated :. Quindi uso respondsToSelector: per scoprire se il metodo è supportato. Ma quando compilo l'applicazione per 6.0 dà un messaggio di avviso comeIl controllo versione iOS fornisce un avviso

presentModalViewController: animato: è deprecato: dal deprecato in iOS 6,0

Chiunque può sapere come sbarazzarsi di questo avviso. Inoltre non ho un dispositivo 4.3 per testare se funziona. Devo supporre che il codice che scrivo debba funzionare su 4.3.

if([myViewController respondsToSelector:@selector(presentModalViewController:animated:)]){ 
     [myViewController presentModalViewController:anotherViewController animated:YES]; 
    }else{ 
     [myViewController presentViewController:anotherViewController animated:YES completion:nil]; 
    } 
+1

Ignorare l'avviso o sopprimerlo: http://stackoverflow.com/a/4133201/427309 –

risposta

3

si poteva fare il check opposto per respondsToSelector potrebbe aiutare, e questo è il modo di andare in realtà se si stanno sostenendo le vecchie versioni :)

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
    [self presentViewController:anotherViewController animated:YES completion:nil]; 
} else { 
    [self presentModalViewController:anotherViewController animated:YES]; 
} 
1

È possibile abilitare/disabilitare l'allarme con il pragma in il tuo codice, ma non sono molto amichevoli da usare. E non ricordo il pragma specifico per questo tipo di avvertimento. Ma alcuni ragazzi qui te lo diranno.

Tra l'altro è possibile utilizzare un semplice

[id performSelector:<#(SEL)#> withObject:<#(id)#>] 

farà il trucco

+0

È un runtime che si lega e richiede più tempo rispetto alla normale chiamata. – Apurv

+2

@Apurv no, '-performSelector:' di solito è veloce come una normale chiamata di metodo - tutto viene compilato con 'objc_msgSend'. –

+1

objc_msgSend viene generato dal compilatore, sia per l'esecuzione: come messaggio semplice. L'unica differenza qui non è quella controllata dal compilatore. Questo è ciò che saika vuole. Il binding è sempre fatto in modo dinamico. –

0

avevo erroneamente impostare la destinazione di distribuzione a 6,0. Quindi stava mostrando il messaggio di avvertimento menzionato. Nessun messaggio di avviso dopo aver modificato l'obiettivo di distribuzione su 4.3 (che devo supportare). Grazie per le risposte !.