7

У меня есть три вида (просмотр 1 проверяет соединение с сервером, вид 2 показывает основной контент, view3 показывает страницу поддержки), и я создал их в раскадровке без кодирования. При запуске приложения iOS в представлении 1 отображается счетчик при проверке соединения с сервером. Если проверка соединения прошла, то я хочу перейти к просмотру 2, и если она не удалась, я хочу перейти к просмотру 3. Вид 1 предназначен только для проверки соединения, и я не хочу возвращаться к этому представлению. Итак, я думаю, мне не нужен контроллер навигации, или?выполнить segue in viewDidLoad() без контроллера навигации в Swift

В раскадровке я подключил все виды с секвенциями. На мой взгляд, контроллер зрения 1 Я делаю это:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let result:Bool = server.isServerAvailable(myURL) 

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

Но это переход в функции viewDidLoad() не работает, но я не знаю, почему. Я добавил кнопку на просмотр, чтобы проверить ее. Я реализовал тот же код, что и в viewDidLoad(), и он отлично работает. При нажатии кнопки загружается следующий вид.

Есть ли идеи, почему код не работает?

ответ

3

Вы можете использовать этот код для навигации.

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

Thx, но теперь я получаю следующее сообщение: ** Внимание: Попытка представить на чей вид не в иерархии окон ** Где моя ошибка? – Martin

+3

Я решил проблему, я перенес код в viewDidAppear(). – Martin

+0

Я пробовал это решение, но получаю сообщение об ошибке ** AnyObject не конвертируется в «UIViewController», вы имели в виду использовать «как!» чтобы заставить downcast? ** почему? –

1

У меня была такая же проблема, и я решил его с этим кодом:

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

Этот код решения для меня (Swift 3) с помощью «SEGUE» (замените «ConnectionCheckToMain» с вашим именем SEGUE .

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