Come indicato nella documentazione:
applicazioni normalmente non è necessario per attivare direttamente segues. Invece, si configura un oggetto in Interface Builder associato a il controller di visualizzazione, ad esempio un controllo incorporato nella sua gerarchia di viste, per attivare il seguito. Tuttavia, è possibile chiamare questo metodo per attivare a livello di codice uno spostamento , magari in risposta a un'azione che non è possibile specificare nel file di risorse dello storyboard. Ad esempio, è possibile chiamare da un gestore di azioni personalizzato utilizzato per elaborare gli eventi dell'accelerometro o degli accelerometri .
Il controller di visualizzazione che riceve questo messaggio deve essere stato caricato da uno storyboard. Se il controller della vista non ha uno storyboard associato, forse perché lo hai allocato e inizializzato da solo, questo metodo genera un'eccezione.
Detto questo, quando si attiva la segue
, normalmente è perché si presume che il UIViewController
sarà in grado di rispondere ad essa con una specifica segue's
identificatore. Sono d'accordo anche con Dan F, dovresti cercare di evitare situazioni in cui potrebbe essere lanciata un'eccezione. Per quanto il motivo per voi di non essere in grado di fare qualcosa del genere:
if ([self canPerformSegueWithIdentifier:@"SegueID"])
[self performSegueWithIdentifier:@"SegueID"];
sto indovinando che:
respondsToSelector:
verifica solo se si è in grado di gestire tale messaggio in fase di esecuzione. In questo caso è possibile, perché la classe UIViewController
è in grado di rispondere a performSegueWithIdentifier:sender:
. Per verificare effettivamente se un metodo è in grado di gestire un messaggio con determinati parametri, suppongo che sarebbe impossibile, perché per determinare se è possibile deve effettivamente farlo funzionare e quando lo fa lo NSInvalidArgumentException
aumenterà.
- Per creare effettivamente ciò che hai suggerito, sarebbe utile ricevere un elenco di id di seguito a cui è associato lo
UIViewController
. Dal UIViewController
documentation, non ero in grado di trovare qualcosa che assomiglia a quello
Per il momento, sto indovinando la soluzione migliore è andare avanti con la @try
@catch
@finally
.
Esattamente la domanda che sto cercando la risposta in questo momento ... –
Hey Dan I finito per usare '@try @catch @ finally'. Funziona bene. – Rog
L'ho fatto anche io, spero davvero che ci sia davvero un modo per controllarlo. Di regola, cerco di evitare situazioni in cui un'eccezione potrebbe essere generata durante normali situazioni di runtime. –