2014-09-29 14 views
7

Ho tre visualizzazioni (vista 1 controlla una connessione al server, vista 2 mostra il contenuto principale, view3 mostra la pagina di supporto) e li ho creati nello storyboard senza codifica. All'avvio della mia app iOS, la vista 1 mostra uno spinner mentre si controlla la connessione al server. Se viene passato il controllo della connessione, voglio andare alla vista 2 e se non funziona, voglio andare alla vista 3. La vista 1 è solo per il controllo della connessione e non voglio tornare a questa vista. Quindi, penso di non aver bisogno di un controller di navigazione, o?esegue il follow in viewDidLoad() senza il controller di navigazione in Swift

Nello storyboard ho collegato tutte le viste con seques. A mio avviso controllore di vista 1 faccio questo:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let result:Bool = server.isServerAvailable(myURL) 

    if (result == true) { 
     performSegueWithIdentifier("ConnectionCheckToMain", sender: self) 
    } 
    else { 
     performSegueWithIdentifier("ConnectionCheckToSupport", sender: self) 
    } 
} 

Ma questo segue nella funzione viewDidLoad() non funziona, ma non so perché. Ho aggiunto un pulsante in vista per controllarlo. Ho implementato lo stesso codice come in viewDidLoad() e funziona perfettamente. Facendo clic sul pulsante viene caricata la vista successiva.

C'è qualche idea del perché il codice non funziona?

risposta

3

È possibile utilizzare questo codice per la navigazione.

let vc : UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ConnectionCheckToMain") as! UIViewController; 
    self.presentViewController(vc, animated: true, completion: nil) 
+0

Thx, ma ora ricevo il seguente messaggio: ** Attenzione: tentativo di presentare on la cui vista non è nella gerarchia delle finestre ** Dov'è il mio errore? – Martin

+3

Ho risolto il problema, ho migrato il codice a viewDidAppear(). – Martin

+0

Ho provato questa soluzione ma ottengo un errore ** AnyObject non è convertibile in 'UIViewController' intendevi usare 'as!' forzare il downcast? ** perché? –

1

Ho avuto lo stesso problema e ho risolto con questo codice:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerClassId") as! ViewControllerClassName 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 
5

Questo codice solvetemi (Swift 3) utilizzando "segue" (si prega di sostituire "ConnectionCheckToMain" con il tuo nome segue .

DispatchQueue.main.async(execute: { 
    self.performSegue(withIdentifier: "ConnectionCheckToMain", sender: nil) 
    }) 
Problemi correlati