TL; DR Puoi avere solo 1 rootViewController ed è l'ultimo presentato. Quindi non provare ad avere un viewcontroller che presenta un altro viewcontroller quando ne è già stato presentato uno che non è stato scartato.
Dopo aver fatto alcuni dei miei test sono giunto a una conclusione.
Se si dispone di un rootViewController che si desidera presentare tutto, è possibile riscontrare questo problema.
Ecco il mio codice rootController (open è il mio collegamento per presentare un viewcontroller dal root).
func open(controller:UIViewController)
{
if (Context.ROOTWINDOW.rootViewController == nil)
{
Context.ROOTWINDOW.rootViewController = ROOT_VIEW_CONTROLLER
Context.ROOTWINDOW.makeKeyAndVisible()
}
ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})
}
Se chiamo aperto due volte di seguito (indipendentemente dal tempo trascorso), funzionerà perfettamente sulla prima apertura, ma NON sulla seconda apertura. Il secondo tentativo di apertura comporterà l'errore sopra.
Tuttavia, se chiudo la vista presentata più di recente, quindi apro open, funziona perfettamente quando chiamo nuovamente open (su un altro viewcontroller).
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
Quello che ho concluso è che il rootViewController solo della CHIAMATA PIÙ RECENTE è nella Gerarchia della vista (anche se non l'hai scartata o rimossa una vista). Ho provato a giocare con tutte le chiamate del caricatore (viewDidLoad, viewDidAppear e fare chiamate di invio ritardate) e ho scoperto che l'unico modo per farlo funzionare è SOLO chiamare presente dal controller della vista più in alto.
presentViewController:animated:completion
un controller di navigazione. Lo stai facendo nel delegato dell'app?