Не могу вызвать segue в коде (Swift)

у меня есть несколько представлений, встроенных в навигационный контроллер.

Я создал несколько сегментов (некоторые из кнопок на другие контроллеры вида, некоторые из одного контроллера вида на другой.

например, у меня есть segue (Show) от одной кнопки до контроллера вида name2, когда я нажимаю кнопку, он отлично работает, но когда я пытаюсь вызвать его программно, приложение падает и выдает ошибку.

вот как я называю segue on ViewController1

self.performSegueWithIdentifier("name2", sender: self)

это ViewController1 to ViewController2

у меня также есть сегмент, который подключен не к кнопке, а от vc1 до vc2, дает ту же ошибку.

Это странная ошибка, я получаю:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (ViewController2) has no segue with identifier 'name2''

Я попытался очистить продукт, а также переустановить симулятор.

скриншот моей раскадровки

storyboard

экран инспектора идентификации viewcontroller1 (он фактически называется ViewController в моем проекте)

Identity Inspector

снимок экрана segue (name3)segue

параметры segue : enter image description here

Edit: Я обнаружил, что когда я подключаю кнопку как IBAction, а затем вызываю performSegueWithIdentifier("LogIn", sender: self) от кнопки он работает правильно.

помочь?

5 ответов


Не подключайте кнопку в Редакторе раскадровки к другому сегменту (если вы хотите вызвать функцию performWithSegue в своем ViewController1) - просто подключите первый ViewController ко второму.

затем вы можете использовать

self.performSegueWithIdentifier("name2", sender: self)

в вашем классе ViewController1.


когда вы устанавливаете Segue от одного контроллера вида к другому, убедитесь, что вы правильно установили класс-см. изображение:

enter image description here

UIStoryBoardSegue что шахты нужны.


ошибка говорит о том, что вы ищете segue в ViewController2 но в вашем вопросе говорится, что segue происходит от кнопки. Это объясняет, почему его нельзя найти.


Попробуйте удалить идентификатор segue (имя ), build ( cmd + b), затем установите идентификатор segue и скомпилируйте. ( в раскадровке конечно )


хорошо, ответ в том, что я довольно тупой,
Всякий раз, когда я создавал новые ViewControllers, я подклассы ViewController который был моим первым ViewController, а не UIViewController что сделало его запустить recursivly.