Почему performSegueWithIdentifier не работает внутри viewDidLoad?

Я пытаюсь запустить раскадровку, как только viewDidLoad вызывается на контроллере представления. Segue имеет прикрепленный идентификатор и отлично работает при вызове изнутри метода, связанного с кнопкой или другим элементом управления. Но он не работает внутри viewDidLoad. Он просто молча терпит неудачу. Есть ли какое-то правило о том, что segue игнорируется в viewDidLoad?

Я пробовал и это:

[self performSegueWithIdentifier: @"mySegue" 
                          sender: self];

и так:

[self dismissViewControllerAnimated:YES completion:^() {
[self performSegueWithIdentifier:@"mySegue" sender:self];
}];

не работает.

2 ответов


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


наиболее вероятной причиной может быть то, что ОС игнорирует второй вызов перехода экрана во время выполнения. В ViewDidLoad переход представления (текущего представления) все еще не завершен. Вы просите другой переход, прежде чем он завершится, и ОС игнорирует его. Это должно быть причиной того, что переход работает при вызове из другой функции. Попробуйте позвонить внутри ViewDidAppear (или после задержки)